cURL中的SSL证书错误

时间:2017-09-11 13:42:05

标签: php ssl curl https

事实

我在Win 10笔记本电脑上有Apache / 2.4.27(Win64)PHP / 7.2.0beta3。我想实现cURL。这是我的代码

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'https://www.youtube.com');
curl_exec($curl);

if (curl_errno ( $curl )) {
    echo curl_error ( $curl );
    curl_close ( $curl );
}

生成错误SSL certificate problem: unable to get local issuer certificate。所以我从https://curl.haxx.se/ca/cacert.pem下载了证书。取了cacert.pem文件,把它放在PHP文件夹中,然后像这样编辑php.ini文件 curl.cainfo = C:php/ext/cacert.pem

问题

现在我收到此错误error setting certificate verify locations: CAfile: C:php/ext/cacert.pem CApath: none。我用谷歌搜索,我找到的唯一解决方案是我必须从我想要的网站下载.crt文件并将其包含在我的cURL中,如curl_setopt($curl, CURLOPT_CAINFO, "C:/wamp64/www/GIAG2.crt");

问题1.1 : 我不知道如何下载.crt文件,所以我可以将它包含在我的代码中,如上例所示。

问题1.2 :这不是一个“通用”解决方案,我想设置我的证书,以便我不必为不同的网站下载不同的证书。

谢谢

2 个答案:

答案 0 :(得分:1)

cURL提供的当前CA Cert摘录包含签署Google的CA证书的GeoTrust Global CA证书颁发机构,后者又签署了YouTube的证书,因此您应该没有问题。你有档案。

根据上一个错误,问题似乎是因为您在/之后错过了C:。消息error setting certificate verify locations表示它无法打开或读取curl.cainfo指定的文件,因此它根本找不到任何证书。

如果您将C:php/ext/cacert.pem更改为C:/php/ext/cacert.pem,则应该能够正确读取CA文件,然后正确验证该网站。

答案 1 :(得分:-1)

最简单的方法是跳过此检查。

@Rule
public WireMockRule wireMockRule = new WireMockRule(options().port(8888).httpsPort(8889));