我看到有吨后的SO,有关错误:证书钢钉与PHP卷曲
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没有提供等效常量,请检查[curl头文件](https://github.com/curl/curl/ blob/master/include/curl/curl.h)。确保PHP使用的是支持它的cURL版本。 – apokryfos
,关注@ apokryfos的角度来看,CURLOPT_PINNEDPUBLICKEY'的'值是230,因此尝试: 'curl_setopt($ CH,230, “SHA256 // TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg =”);' – Carey
@Carey从我在读卷曲apokryfos发布的标题,值是10230.因为STRINGPOINT是10000.但无论如何,它没有成功。我应用后没有看到任何更改,我可以连接到任何https服务器。但我确认cURL版本是7.49.1,应该支持。并使用命令curl:curl --pinnedpubkey“sha256 // TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg =”--url https://google.ca也给了我适当的错误。 –