这里是文章模块栏目内容页
PHP curl出现SSL certificate problem: self signed certificate in certificate chain

使用PHP curl请求https的时候出现错误“SSL certificate problem: self signed certificate in certificate chain”,这种情况是无法验证客户端根证书导致,解决办法如下。


方法一

忽略证书验证,在curl方法中添加以下代码即可。

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

缺点: 每个curl方法中都要添加上面的方法,有点麻烦。

方法二:

从curl官方网站,下载根证书:cacert.pem ,然后修改php.ini中加入该证书,并重启web服务。

 
#在php.ini中加入[SSL]
curl.cainfo = "D:\xampp\php\cacert.pem"openssl.cafile = "${curl.cainfo}"


我更加推荐用方法1,它直接在代码里面写,可移植性更加高。


完整的curl 初始化方法:

 $curl = curl_init();
 curl_setopt_array($curl, [
 CURLOPT_RETURNTRANSFER => 1,
 CURLOPT_URL => $updateURL,
 CURLOPT_USERAGENT => 'SiteApp Updater',
 CURLOPT_SSL_VERIFYPEER => false,
 CURLOPT_SSL_VERIFYHOST => false,
 ]);
 
$response = curl_exec($curl);
  if($response === false) {
   throw new \Exception('Could not do request to updater server: '.curl_error($curl));
  }
  
curl_close($curl);