Записи с тегом «SSL»

Ошибка CURLE_SSL_CACERT(60) и API ВКонтакте

11.09.2011 21:33 / Артём Волк / 390 просмотров / ...

Обращение к API ВКонтакте требует осуществления запросов по протоколу HTTPS. Для первых тестов все проверки можно легко отключить:

$ch = curl_init();	
curl_setopt_array($ch, array(
	CURLOPT_SSL_VERIFYPEER => FALSE,
	CURLOPT_SSL_VERIFYHOST => FALSE,
));

Но в рабочем приложении хотелось бы использовать соединения со всеми проверками. Если их включить, возникнет ошибка с номером 60 (CURLE_SSL_CACERT). Причина этой ошибки в том, что у cURL'а, в отличие от браузеров, нет набора корневых сертификатов, поэтому проверить подлинность сервера, к которому осуществляется соединение он не может (подробнее о работе с SSL сертификатами в cURL можно прочитать здесь).

У Facebook для решения этой проблемы в комплекте с PHP SDK есть файл с цепочкой сертификатов, который указывается с помощью параметра CURLOPT_CAINFO:

curl_setopt($ch, CURLOPT_CAINFO,
	dirname(__FILE__) . '/fb_ca_chain_bundle.crt');

В теории, сгенерировать такую цепочку несложно прямо из Firefox, но у меня она почему-то не заработала. Другой способ решения проблемы — скачать копию корневых сертификатов от Mozilla Firefox в понятном для cURL формате и указать путь к файлу в параметре CURLOPT_CAINFO.

Минус решения — как показал пример истории с DigiNotar, необходимо пристально следить за актуальности набора корневых сертификатов.