【问题标题】:Certificate Pinning with PHP cURL使用 PHP cURL 固定证书
【发布时间】:2016-06-28 11:50:44
【问题描述】:

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

【问题讨论】:

  • 总是可以尝试使用 curl 库定义的 CURLOPT_PINNEDPUBLICKEY 的整数值,即使 PHP 没有提供等效的常量,请检查 the curl header 的值。确保 PHP 使用的是支持它的 cURL 版本。
  • 按照@apokryfos 的观点,CURLOPT_PINNEDPUBLICKEY 的值为 230,因此尝试:curl_setopt($ch, 230, "sha256//TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg=");
  • @Carey 从我在 apokryfos 发布的 curl 标题中读到的内容,该值为 10230。因为 STRINGPOINT 是 10000。但无论哪种方式,它都没有成功。应用后我看不到任何更改,我可以连接到任何 https 服务器。但我确认 cURL 版本是 7.49.1,应该支持。并使用命令 curl: curl --pinnedpubkey "sha256//TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg=" --url google.ca 也给了我正确的错误。
  • 您成功解决了这个问题吗?我有同样的问题,但似乎无法解决它......谢谢!
  • @hpuiu 请看我的回答。

标签: php ssl curl game-center


【解决方案1】:

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

【讨论】:

  • 我已经尝试过这个,即使是最新的 PHP ( 7.0.11 ),它具有使用 curl 7.50.1 构建的 curl 扩展。现在内置了对固定证书的支持,因此定义了 CURLOPT_PINNEDPUBLICKEY (10230) 等等,但即使我设置了证书固定,我仍然得到与没有固定设置相同的 Got error 60 - SSL certificate problem: unable to get local issuer certificate 错误。如果指纹错误,我不应该得到特定的curl: (90) SSL: public key does not match pinned public key! 错误吗?
猜你喜欢
  • 2018-04-07
  • 1970-01-01
  • 2013-07-24
  • 2014-09-27
  • 2011-10-31
  • 2015-12-27
  • 2015-01-22
  • 2017-11-14
  • 1970-01-01
相关资源
最近更新 更多