再会!
我有 REST API,可以通过 SSL (https://) 访问。我想将正确的证书(或证书链)与我编写的 PHP 和 CURL 脚本一起发出请求。
以下是我的目标的证书方式(http://api.vkontakte.ru)在 Firefox 中看起来像:
http://speedcap.net/img/bc687485819715c65d6fe1e4ca1fdc40/1a2be.png
以下是从 Firefox 保存的“PEM 格式的证书链 X.509”的片段
(此处描述: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
)抱怨错误的证书。
我尝试过的:
我已经验证我的证书文件已被使用,因为当我指定错误的路径时,它抱怨找不到证书(错误 70)
我已经检查了 Facebook SDK 和他们的证书链,我的 CURL 可以使用这样的设置
我尝试导出不同的链(包括或排除)链中的最后一个证书
Tried CURLOPT_SSL_VERIFYHOST => 1
.
欢迎任何想法!