Использование ssl сертификата для подключения к вебсервису

NexQ

Новичок
Использование ssl сертификата для подключения к вебсервису

Подключаюсь к вебсервису с помощью nosoap, возникла необходимость использовать сертификат ssl для подключения. Для вебсервиса есть wsdl файл, так же есть файл сертификата, вопрос в том как его использовать для подключения, если через curl_setopt, то как потом передать дескриптор curl в nosoap, а в самом nosoap не нашел такой функции.
 

Alexandre

PHPПенсионер
NexQ Есть несколько вариантов использования защищенных вебсервисов.

Один из них - это организация SSL канала между WEB сервисом и клиентом, а сам обмен идет по SOAP

в этом случае, с помощью curl организуешь ssl канал, а далее используешь простой запрос, через SOAP клиента

Второй, это использование специальных протоколов защищенных WEB сервисов, например http://docs.oasis-open.org/wss/v1.1/wss-v1.1-spec-os-SOAPMessageSecurity.pdf
Которые все больше и больше находят применение в современных решениях.

По второму случаю, я могу предложить взять за основуу использовать класс xmlsec http://www.phpclasses.org/browse/package/3025.html для формирования SOAP заголовка в соответствии вышеуказанной ссылки, либо использовать расширение (но доки на авторизацию пока нет..., появится не раньше понедельника вторника) beta-version php_xmlsec, которое можно найти на http://edocs.phpclub.net/xmlsec
Начни изучение с презентации http://edocs.phpclub.net/xmlsec/frame

Могу порекомендовать посмотреть http://ctindustries.net/conf/XML Encryption and Authentication.ppt
Также на этом сайте есть PHP классы использования защищенного WEB сервисов, но увы сайт underconstruction.

Как вариант, можно использовать расширение php_axis. Конкретно, на наличие возможности работать с защищенными WEB сервисами, я не проверял, но сам axis2 - это позволяет (http://ws.apache.org/axis2/).
Есть куча java классов, которые реализуют эту возможность, и их можно вызывать из пхп (тот же axis).



NexQ уточни условия защиты своего WEB сервиса.
 

NexQ

Новичок
Alexandre
Вообще файл сертификата в формате pfx, к нему есть пароль, его можно будет использовать или он только для MS IE применим? Или нужен .CER?
 

Alexandre

PHPПенсионер

NexQ

Новичок
Автор оригинала: Alexandre
NexQ если честно, я работал только с форматом СER
думаю это конвертится в обе стороны
Пароль он существует как для формата СER тоже.

http://www.cs.auckland.ac.nz/~pgut001/pubs/pfx.html
http://dev2dev.bea.com/pub/a/2006/08/pfx-pem-certificate-formats.html

NexQ ты разобрался какой у тебя способ защиты вэбсервиса
На счет способа защиты, я так понял, что просто есть клиентский сертификат подписанный СА, на защищенном серевере стоит IIS, единственное что я не понял, как можно из сертификата вытащить private key, который требуется для подключения в setCredentials(), т.е. по второй ссылке описан способ как его можно достать, но слишком трудоемко, пробую через curl:

$ch = curl_init("https://mysite.com");
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.crt'); // cert.crt - это то что получилось после экспорта cert.pfx из ИЕ
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'password');
потом запускаю:
$client = new soapclient('myserver.wsdl')
Выдает ошибку что: The page requires a client certificate
 

Alexandre

PHPПенсионер
NexQ
SOAP - это всего лишь протокол передачи объектов, который лежит поверх протокола HTTP или HTTPS.

попробуй взять через курл GETом 'myserver.wsdl' или любую страницу по HTTPS сразу поймешь - есть или нет SSL соединение.
 

NexQ

Новичок
Автор оригинала: Alexandre
NexQ
SOAP - это всего лишь протокол передачи объектов, который лежит поверх протокола HTTP или HTTPS.

попробуй взять через курл GETом 'myserver.wsdl' или любую страницу по HTTPS сразу поймешь - есть или нет SSL соединение.
Видимо это проблема с SSL, так как такое обращение:

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSLCERT, 'cert_client.pem');
curl_setopt($ch, CURLOPT_SSLKEY, 'key.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'passwd');
curl_setopt($ch, CURLOPT_URL, "https://mysitr.com");
curl_exec($ch);
echo curl_error($ch);

Выдает ошибку:
unable to use client certificate (no key found or wrong pass phrase?)

Из первоначального файла cert.pfx - получился cert.pem из которого часть относящуюся к ключу

-----BEGIN RSA PRIVATE KEY-----
....
-----END RSA PRIVATE KEY-----
я переписал в key.pem, а сам сертификат в cert_client.pem
 

Alexandre

PHPПенсионер
думаю, тебе необходимо сгенерить SSL ключи самостоятельно, а потом их подписать тем сертификатом, который тебе прислаты, и использовать свои ключи.
Попробуй так.
 
Сверху