Выбрать страницу

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

Изучаем curl

Вспомним, что для установки параметров соединения используется функция 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://www.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 (https://www.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://www.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 (https://www.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);
?>

На этом хочется закончить сегодняшний рассказ. Будут вопросы пишите.

Share This