找回密码
 注册

[PHP] PHP cURL https SSL certificate problem: unable to get local issuer certificate

php 发表于 2014/6/26 17:21 | 显示全部楼层 |阅读模式
PHP通过cURL访问https时出现SSL certificate problem: unable to get local issuer certificate的解决方法可以分为以下三种。

方法一:将CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER都设置为false或0来禁用这两个配置

方法二:从cURL官方网站下载证书签发机构的根证书并保存到服务器电脑上,然后在PHP生效的配置文件php.ini中添加以下条目,重新启动服务器后生效。

方法三:从cURL官方网站下载证书签发机构的根证书并保存到服务器电脑上,然后在PHP代码中将CURLOPT_CAINFO的值设置为该证书文件的路径,如果没有对服务器程序配置的操作权限,这个方法尤为重要。下载链接和设置CURLOPT_CAINFO的方法可以参考方法一和方法三中相关操作。

需要说明的是,使用方法一将CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER禁用,会导致有被中间人攻击(Man-in-the-Middle Attack,MITM attack)的安全隐患。如果有服务器程序配置的操作权限,建议使用方法二,如果无权修改服务器程序配置,建议选用方法三。

方法二需要在php.ini中添加的配置参数
  1. [SSL]
  2.         curl.cainfo = "D:\server\wuxiancheng.cn\ssl\cacert.pem"
  3.         openssl.cafile = "${curl.cainfo}"
复制代码
其中curl.cainfo的值需要根据实际情况修改为下载得到的证书文件的真实路径。

方法一代码如下:
<?php
$cURL = curl_init();
$url  = 'https://www.51-n.com/';
curl_setopt_array(
        $cURL,
        array(
                CURLOPT_URL => $url,        
                CURLOPT_REFERER => $url,
                CURLOPT_AUTOREFERER => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_SSL_VERIFYPEER => false,
                CURLOPT_SSL_VERIFYHOST => false,
                CURLOPT_CONNECTTIMEOUT => 1,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36'
        )
);
//其他代码...
?>

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表