使用PHP cURL固定证书

时间:2016-06-28 11:50:45

标签: php ssl curl game-center

我看到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中没有这样的常量,我不知道常量的实际值是多少)

1 个答案:

答案 0 :(得分:0)

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

相关问题