Я пытаюсь написать PHP-скрипт с использованием cURL, который может авторизовать пользователя через страницу, использующую сертификат SSL, в дополнение к имени пользователя и паролю, и я не могу получить после этапа SSL cert.Ошибка при использовании PHP cURL с сертификатами SSL
В этом случае curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
, к сожалению, не является вариантом. Сертификат является обязательной частью аутентификации, в противном случае я получаю ошибку, указанную в this other similar SO post.
Я попробовал несколько командной строки выполняется с Curl:
> curl --url https://website
Это возвращает ошибку (60) SLL certificate problem
. Если я регулирую команду включить --cacert
вариант:
> curl --url https://website --cacert /path/to/servercert.cer
Он работает просто отлично; возвращается веб-сайт auth.
Однако, я попытался следующий 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);
Я бы подумал, что код был по существу аналогичны командам оболочки, но вместо этого я поздоровался со следующим сообщением об ошибке:
Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none
Я прочитал всю литературу, которую я могу найти (особенно на php.net и curl.haxx), и, похоже, не может найти ничего, что устраняет эту проблему. Какие-либо предложения?
EDIT: Я пробовал chmod 777 servercert.cer
без каких-либо успехов. Однако при выполнении PHP-скрипта с указанным выше кодом из командной строки вместо браузера через php test.php
он работает отлично. Любое объяснение того, почему он не работает в браузере?
РЕДАКТИРОВАТЬ 2: Эти дисквалификации на единственные души, достаточно храбрые, чтобы ответить на этот вопрос, стареют. Либо сделайте что-нибудь значимое, либо передайте, пожалуйста.
Есть ли у PHP определенно разрешение на чтение этого файла? Попробуйте запустить скрипт из командной строки: php my.php – Greg
Странно! Я тестировал его, как вы сказали, и он отлично работал! Зачем это работать из командной строки, но не из браузера? – Magsol
http://serverfault.com/questions/121768/curl-or-ssl-problems-how-to-solve/297484#297484 – 2011-08-04 09:20:47