加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用PHP cURL固定证书

发布时间:2020-12-13 22:26:32 所属栏目:PHP教程 来源:网络整理
导读:我看到SO中有很多帖子,关于错误: SSL certificate problem: unable to get local issuer certificate 这是我得到的那个. 他们的所有答案都只是说下载根证书来自: https://curl.haxx.se/ca/cacert.pem 并设置为CURLOPT_CAINFO或设置php.ini的curl.cainfo.
我看到SO中有很多帖子,关于错误:

SSL certificate problem: unable to get local issuer certificate

这是我得到的那个.

他们的所有答案都只是说下载根证书来自:

https://curl.haxx.se/ca/cacert.pem

并设置为CURLOPT_CAINFO或设置php.ini的curl.cainfo.

但这样做实际上只是告诉cURL信任根CA及其可信CA的列表.

根据我的理解,证书固定应该忽略所有这些根CA并且只信任特定提供商的单个证书.

修复此错误的正确方法是什么?

$ch =  curl_init($url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true);        
    curl_setopt($ch,CURLOPT_CAINFO,'/etc/httpd/static.gc.apple.com.pem');
    curl_setopt($ch,CURLOPT_CAPATH,'/etc/httpd/');

    //curl_setopt($ch,CURLOPT_PINNEDPUBLICKEY,"sha256//TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg=");
    $sslCertificate = curl_exec($ch);

我知道对于libcurl本身,它有一个选项“CURLOPT_PINNEDPUBLICKEY”,它完全符合我的需要,但目前PHP仍然不支持它…(它在PHP中没有这样的常量,我不知道实际值是什么常数)

解决方法

基本上问题是因为安装了来自Remi的yum的PHP本身没有使用支持它的curl和openssl编译. 所以我们必须更新curl,openssl,从源代码编译PHP并且它有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读