Я пытаюсь написать сценарий PHP с использованием cURL, который может авторизовать пользователя на странице, использующей сертификат SSL, в дополнение к имени пользователя и паролю, и я не могу пройти этап сертификации SSL.
В этом случае, к сожалению, curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
не вариант. Сертификат является обязательной частью аутентификации, в противном случае я получаю ошибку, упомянутую в этом другом аналогичном сообщении SO .
Я пробовал несколько команд командной строки с помощью cURL:
> curl --url https://website
Возвращает ошибку (60) SLL certificate problem
. Если я настрою команду для включения опции --cacert
:
> curl --url https://website --cacert /path/to/servercert.cer
Работает просто отлично; сайт авторизации возвращается.
Однако я попробовал следующий код PHP:
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => '0',
CURLOPT_SSL_VERIFYPEER => '1',
CURLOPT_CAINFO => '/path/to/servercert.cer',
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => 'https://website'
);
curl_setopt_array($handle, $options);
curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
Я бы подумал, что код по сути аналогичен командам оболочки, но вместо этого меня приветствует следующее сообщение об ошибке:
Ошибка: ошибка установки сертификата при проверке местоположения: CAfile: /path/to/servercert.cer CApath: нет
Я прочитал всю литературу, которую могу найти (в частности, на php.net и curl.haxx) и не могу найти ничего, что решило бы эту проблему. Есть предложения?
РЕДАКТИРОВАТЬ : Я пытался chmod 777 servercert.cer
безуспешно. Однако при выполнении сценария PHP с указанным выше кодом из командной строки вместо браузера через php test.php
он работает отлично. Любое объяснение, почему это не работает в браузере?
РЕДАКТИРОВАТЬ 2 : Эти понижающие голоса единственных душ, достаточно смелых, чтобы ответить на этот вопрос, стареют. Либо добавьте что-нибудь значимое, либо пройдите мимо, пожалуйста.