Я уже публиковал заметки на тему работы с CURL. Сегодня хочу рассказать как работать по протоколу HTTPS.

Вспомним, что для установки параметров соединения используется функция curl_setopt:
-
<?php
-
bool curl_setopt ( resource $ch , string $option , mixed $value )
-
//$ch – дескриптор сессии
-
//$option – устанавливаемый параметр
-
//$value – значение параметра, который устанавливает
-
?>
Вообще в идеале, для работы по протоколу HTTPS, ничего дополнительно настраивать не надо. На практике же все с точностью наоборот.
Для работы по протоколу HTTPS в большинстве случаев будет достаточно, отключить проверку сертификатов.
-
<?php
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
-
?>
CURLOPT_SSL_VERIFYPEER Установите этот параметр в ноль, чтобы запретить проверку сертификата удаленного сервера (начиная с curl 7.10, по умолчанию этот параметр имеет значение TRUE). Дополнительные сертификаты можно задать с помощью параметра CURLOPT_CAINFO (добавленного в curl 7.9.8). Можно также указать путь к файлам сертификатов в параметре CURLOPT_CAPATH . Если CURLOPT_SSL_VERIFYPEER установлен в 0, возможно, также потребуется установить CURLOPT_SSL_VERIFYHOST в 1 или 0 (по умолчанию 2).
CURLOPT_SSL_VERIFYHOST Задает проверку имени, указанного в сертификате удаленного сервера, при установлении SSL соединения. Значение 1 означает проверку существования имени, значение 2 – кроме того, и проверку соответствия имени хоста.
В некоторых случаях необходимо явно указать версию SSL протокола:
-
<?php
-
curl_setopt($ch, CURLOPT_SSLVERSION,2);
-
?>
CURLOPT_SSLVERSION Целое число, указывающее, какую версию SSL использовать (2 или 3). По умолчанию версия SSL определяется автоматически, но в некоторых случаях требуется явное указание.
Простой пример HTTPS запроса
-
<?php
-
$ch = curl_init();
-
//Указываем URL, куда будем обращаться. Протокол https://
-
curl_setopt($ch, CURLOPT_URL, 'https://blog.yousoft.ru/');
-
curl_setopt($ch, CURLOPT_HEADER, false);
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
-
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://blog.yousoft.ru)');
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
-
$data = curl_exec($ch);
-
curl_close($ch);
-
?>
Использование сертификатов
Некоторые сервисы предлагают авторизацию по сертификату. CURL умеет работать с сертификатами в формате PEM.
-
<?php
-
//Имя сертификата
-
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.pem');
-
//Пароль сертификата
-
curl_setopt($ch, CURLOPT_SSLCERTPASSWD,'certpass');
-
?>
CURLOPT_SSLCERT Имя файла с сертификатом в формате PEM.
CURLOPT_SSLCERTPASSWDПароль к файлу сертификата, заданному параметром CURLOPT_SSLCERT.
Если у вас нет сертификата в данном формате, можно сделать его из других форматов, например из PFX, который успешно используется в основных браузерах. Для того, чтобы выполнить такое преобразование, нам будет необходима программа OpenSSL. Установить ее не сложно, и описывать ее установку в рамках статьи не планируется. Предположим, что она уже установлена, тогда для того, чтобы выполнить необходимое нам преобразование достаточно выполнить команду:
-
#openssl pkcs12 -in cert.pfx -out cert.pem –nodes
Система попросит ввести пароль:
-
Enter Import Password:
Если пароль введен правильно, то вы увидите следующее сообщение:
-
MAC verified OK
Теперь нужно придумать новый пароль, но уже для PEM файл, который вы потом и будете передавать в качестве значения параметра CURLOPT_SSLCERTPASSWD.
-
Enter PEM pass phrase:
Ни и конечно попросит еще раз ввести пароль, вдруг вы ошиблись:
-
Verifying – Enter PEM pass phrase:
Теперь у нас есть PEM файл ‘cert.pem’, и мы можем спокойно подключаться к серверу:
Простой пример HTTPS запроса с аутентификацией на основе сертификата
-
<?php
-
$ch = curl_init();
-
//Указываем URL, куда будем обращаться. Протокол https://
-
curl_setopt($ch, CURLOPT_URL, 'https://blog.yousoft.ru/');
-
curl_setopt($ch, CURLOPT_HEADER, false);
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
-
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://blog.yousoft.ru)');
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
-
//Путь до сертификата
-
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.pem');
-
//Пароль сертификата
-
curl_setopt($ch, CURLOPT_SSLCERTPASSWD,'certpass');
-
$data = curl_exec($ch);
-
curl_close($ch);
-
?>
На этом хочется закончить сегодняшний рассказ. Будут вопросы пишите.
Похожие записи:
- Используем CURL (php) часть 2 (отправка GET и POST запросов)
- Используем CURL (php) часть 1
- Используем CURL (php) часть 4 (работаем с COOKIES, 2 способа)
- Используем CURL (php) практика: 20 последних запросов пользователей Яндекса
- curl в php практическое применение
Метки: curl

Спасибо большое за статью, помогла разобраться с https соединением, а то у webmoney сертификаты как правило не подписанные.
Спасибо за статью, пригодилась.