美好的一天!PHP CURL和SSL证书(或证书链)
我有可通过SSL(https://)访问的REST API。我想把正确的证书(或证书链)连同我的脚本写成PHP和CURL来提出请求。
下面是我的目标(http://api.vkontakte.ru)证书怎么看起来像在Firefox:
http://speedcap.net/img/bc687485819715c65d6fe1e4ca1fdc40/1a2be.png
这里是保存的“证书链X.509 PEM格式”从Firefox 片段(这里所描述:http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/):
-----BEGIN CERTIFICATE-----
MIIFVzCCBD+gAwIBAgIHKx5Ov2FOejANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
[..skip...]
0npsf5fkvT8E13NgVY0PK6V/baMTlTgWXKQZ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
[..skip...]
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
U+4=
-----END CERTIFICATE-----
这里是CURL初始化的代码例如:
$this->ch = curl_init();
curl_setopt_array($this->ch, array(
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_AUTOREFERER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_SSL_VERIFYPEER => TRUE,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_CAINFO => <path to my cert>,
));
我有CURL错误60(CURLE_SSL_CACERT
)抱怨wron cert。
我已经试过什么:
我核实,我的证书文件被使用,因为当我指定了错误的道路它抱怨找不到证书(误差70)
我已经与Facebook SDK和他们的证书链,我的工作卷曲这样的设置
我试图导出不同的链(包括或不包括)的环比证书检查
试过
CURLOPT_SSL_VERIFYHOST => 1
。
欢迎任何想法!
谢谢,它适用于这个包:http://curl.haxx.se/docs/caextract.html。但是,我应该如何为我的目标网站提取正确的证书? – artvolk
我尝试去掉那个ca文件只是为了证明我在链中,它不起作用:( – artvolk
,风选过程不是我以前试过的东西,它只要你拿出一个就失效了吗?如果是这样,它可能是一个格式问题,否则,你可能需要不断尝试。 –