| 
 
| 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中添加的配置参数
 
 其中curl.cainfo的值需要根据实际情况修改为下载得到的证书文件的真实路径。复制代码[SSL]
        curl.cainfo = "D:\server\wuxiancheng.cn\ssl\cacert.pem"
        openssl.cafile = "${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'
 )
 );
 //其他代码...
 ?>
 | 
 |