使用PHP curl請求https的時候出現錯誤“SSL certificate problem: self signed certificate in certificate chain”,這種情況是無法驗證客戶端根證書導致,解決辦法如下。
方法一
忽略證書驗證,在curl方法中添加以下代碼即可。
function httpRequest($sUrl, $aHeader, $aData){
$ch = curl_init();
if(substr($sUrl,0,5)=='https'){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 從證書中檢查SSL加密算法是否存在
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $sUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($aData));
$sResult = curl_exec($ch);
if($sError=curl_error($ch)){
die($sError);
}
curl_close($ch);
return $sResult;
}
方法二:
從curl官方網站,下載根證書:cacert.pem ,然後修改php.ini
中加入該證書,並重啓web服務。(這個沒試過)
#在php.ini中加入
[SSL]
curl.cainfo = "D:\xampp\php\cacert.pem"
openssl.cafile = "${curl.cainfo}"