Добрый день!
У меня есть REST API, который доступен через SSL (https://). Я хотел бы поставить правильный сертификат (или цепочку сертификатов) вместе со своими сценариями, написанными на 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)
Я проверил с помощью SDK Facebook и их цепочки сертификатов, что мой CURL работает с такой настройкой
Я пытался экспортировать различные цепочки (включая или исключая) последний сертификат в цепочке
Пробовал CURLOPT_SSL_VERIFYHOST => 1
.
Любые идеиДобро пожаловать!