Пользователи часто задают вопрос: как парсить сайты защищенные ssl сертификатами. У cURL для этого есть специальные средства. Сертификат подключается, как обычный файл плюс файл с ключами. Единственное ограничение: cURL на php понимает только сертификаты формата pem, а большинство серверов работает на связке p12+crt

Значит нужно найти конвертор.

Для этого нужна библиотека openssl. Если у Вас linux, то она 100% у Вас уже стоит, и вы можете пропустить этот абзац. Для меня, как для windows пользователя, придумали специальные программы для запуска подобных пакетов. После недолгих поисков по сети я нашел cygwin. Если лень возиться с отдельной установкой OpenSSL и других попутных штук то лучше при установке кликните на установку всех пакетов.

Пакеты грузятся довольно долго, но после установки всех пакетов Вам будет доступен вот такой терминал

Берем файл  *.p12 (его можно экспортировать из браузера) и бросаем его в папку C:/cygwin/home/

Далее в терминале с помощью команд cd .., ls, cd {path} переходим в папку home, если Вы еще не в ней, и запускаем следующую команду

openssl pkcs12 -in file.p12 -out keys.pem -nocerts

 Конвертация p12 сертификата в pem сертификат

программа попросит ввести пароль от сертификата. И другой пароль, который следует запомнить, к примеру 11111, затем повторить его.

Так мы сгенерировали файл с ключами. Теперь нужно сгенерировать файл с сертификатами.

 openssl pkcs12 -in cert.p12 -out cert.pem -nokeys -clcerts

Конвертирование p12 сертификата в pem файл

Нам потребуется еще один сертификат - сертификат сервера. Он имеет расширение crt, и отдается сервером при первом заходе. 

Теперь у нас есть 3 файла. Создайте на своем веб-сервере файл index.php, рядом с ним положите эти три файла keys.pem, cert.pem и ca.crt

В index.php пишем

<?php
$curl = curl_init(); 
curl_setopt($curl,CURLOPT_URL,"https://sitename.ru/");
curl_setopt($curl,CURLOPT_HEADER,true);
curl_setopt($curl, CURLOPT_FAILONERROR, 1); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl,CURLOPT_POST,0);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,true);
curl_setopt($curl,CURLOPT_CAINFO,getcwd().'/ca.crt');
curl_setopt($curl,CURLOPT_SSLCERT,getcwd().'/cert.pem');
curl_setopt($curl,CURLOPT_SSLCERTPASSWD,"11111");
curl_setopt($curl,CURLOPT_SSLCERTTYPE,"PEM");
curl_setopt($curl,CURLOPT_SSLKEY,getcwd().'/keys.pem'); 
curl_setopt($curl,CURLOPT_SSLKEYPASSWD,"11111");
if($data = curl_exec($curl))
	echo $data;
else 
	echo curl_error($curl);
curl_close($curl);

Вот так и парсим сайты со сложной системой защиты. На всякий случай предупрежу: не стоит парсить все подряд, ведь если ресурс защищен такого рода защитой, то там и сидят не дураки. Достаточно того, что сертификат, котороый у Вас есть уникален и по информации из него достаточно легко Вас идентифицировать. Поэтому сперва узнайте владельца домена, а уже потом предпринимайте различные действия. Ведь Вам будет очень неприятно, если вы проводя свои эксперименты  с сертификатом своего банка, вдруг будете им забанены.

Будьте осторожны,желаю удачи.

Информация размещена лишь в ознакомительных целях, только для демонстрации технологии ssl+curl+php

 

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

sv.radiacia
# sv.radiacia 19.11.2013 02:07
сенкс
Leroy
# Leroy 22.11.2013 14:47
Момент, который однажды сэкономил мне кучу времени

curl_setopt($curl, CURLOPT_SSLVERSION, 3); // указываем версию ssl


и все странным образом начинает работать
Leroy
# Leroy 23.05.2014 17:41
Попробуем еще раз
Smithe986
# Smithe986 26.07.2014 15:02
Helpful info. Fortunate me I found your website by chance, and I'm shocked why this twist of fate did not took place earlier! I bookmarked it. fadkbecgedaffakb
Павел_1
# Павел_1 31.01.2015 12:30
"Берем файл *.p12 (его можно экспортировать из браузера) и бросаем его в папку C:/cygwin/home/"
у меня нет при экспорте *.p12, есть *.crt . Подойдет .crt ?
Valeriy Chupurnov
# Valeriy Chupurnov 31.01.2015 19:37
погуглите "crt to p12"
Smithe247
# Smithe247 20.08.2016 20:57
Excellent post. I was checking continuously this blog and I'm impressed! Extremely useful information specially the last part cbdedcgeaddacgfe
Артур2222
# Артур2222 08.12.2016 12:36
ну вот неплохая статья единственная доступная, которая попалась в топе выдачи.

только почему бы Важные моменты подробнее не описать?

"Берем файл *.p12 (его можно экспортировать из браузера) и бросаем его в папку C:/cygwin/home/"

У меня чё-то нельзя этот файл взять в мозиле функции нет, а в хроме запрещена опция. Как же его экспортировать?