Xpoint
   [напомнить пароль]

Сертификат p12 - как работать с сайтом через CURL

Метки: [без меток]
[арх]
2010-08-09 15:43:31 [обр] zmey[досье]

Добрый день!

Есть сайт с биллингом, для доступа к нему мне выдали сертификат .p12 и пароль для установки. Я установил этот сертификат в броузер и захожу на сайт. Теперь вот захотелось выдирать некоторую инфу с этого сайта через CURL, но не могу придумать как срастить CURL и .p12 сертификат. Погуглив, я понял, что вроде как сей сертификат нужно преобразовать в какие-то другие, но четкой технологии не понял... Помогите, кто чем может!

спустя 13 часов [обр] Алексей Полушин(62/231)[досье]
Тут написано http://www.manpagez.com/man/1/pkcs12/
Если коротко: openssl pkcs12 -in cert.pfx -out cert.pem
Где брать openssl - http://www.openssl.org/related/binaries.html
спустя 4 часа 35 минут [обр] zmey[досье]
Алексей Полушин[досье], спасибо за ответ.
openssl у меня есть, конечно, переконвертить не проблема. Во что конвертить и как через CURL с этим работать, подскажете? В тех примерах, которые я находил, там не только pem был, были и еще какие. А нужно ли это, и что нужно - непонятно.
спустя 11 часов [обр] Алексей Полушин(62/231)[досье]
Если конвертировать, как я написал выше, то у вас будет сертификат и закрытый ключ в одном файле. Использовать примерно так (пароль задается в процессе конвертации):
curl_setopt($r,CURLOPT_SSLCERT,'cert.pem');
curl_setopt($r,CURLOPT_SSLCERTPASSWD,'password');
Если почитать документацию, можно разложить ключ и сертификат в разные файлы. Тогда и в curl надо указывать их по отдельности.
спустя 12 часов [обр] zmey[досье]

Делаю раз:

web2# openssl pkcs12 -in cert.p12 -out cert.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
web2#

Затем пишу:

$url = "https://secure....";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '1234');

ob_start();
curl_exec($ch);

if(curl_errno($ch) != 0 ) {
   die('CURL_error: ' . curl_errno($ch) . ', ' . curl_error($ch));
};

$content = ob_get_contents();
ob_end_clean();
curl_close($ch);

echo $content;

И вижу:

CURL_error: 58, unable to use client certificate (no key found or wrong pass phrase?)

спустя 9 минут [обр] zmey[досье]
Апдейт. Прописал абсолютный путь к сертификату.
Теперь такая ошибка:
CURL_error: 60, SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
спустя 12 минут [обр] zmey[досье]
Алексей Полушин[досье], огромное спасибо. Остальное додумал сам.
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLCERT, $dir.'/cert.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '1234');
curl_setopt($ch, CURLOPT_USERPWD, "lalala:lololo");
спустя 10 часов [обр] Алексей Полушин(62/231)[досье]

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - это нехорошо

curl_setopt($ch, CURLOPT_CAINFO, '/тут_путь_к_корневому_сертификату'); - лучше так

Powered by POEM™ Engine Copyright © 2002-2005