powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Авторизация SOAP клиента при помощи SSL сертификата
2 сообщений из 2, страница 1 из 1
Авторизация SOAP клиента при помощи SSL сертификата
    #38724444
Привет всем!


Есть задача авторизовать SOAP client из Zend Framework (который по сути ни чем не отличается от обычного пхпшного клинта, кроме названия параметров), при помощи выданного клиентского сертификата.


Конфигурация сервера: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.3 OpenSSL/1.0.1f
Конфигурация виртуалхоста где крутится SOAP сервер:
<VirtualHost _default_:443>
ServerAdmin test@localhost
ServerName test
DocumentRoot /var/www/test/public
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/test_error.log
CustomLog ${APACHE_LOG_DIR}/test_access.log combined


SSLEngine On
SSLCertificateFile /etc/ssl/my-server.crt
SSLCertificateKeyFile /etc/ssl/my-server.key
SSLCACertificateFile /etc/ssl/ca.crt
SSLOptions +StdEnvVars +ExportCertData


<Directory /var/www/test/public/>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>


в htaccess помимо зендовых реврайтов дописано:

SSLRequireSSl
SSLVerifyClient require


Собственно сам запрос:
$local_cert = '/home/test/01.pem';
$wsdl = '/home/test/soap.wsdl';
$context = stream_context_create(array(
'ssl' => array(
'verify_peer' => false,
'allow_self_signed' => true,
'local_cert' => $local_cert,
),
));


$client = new Client($wsdl, array(
'stream_context' => $context,
));


$client->createOffer();


Запрос падает с ошибкой: Could not connect to host


Сразу скажу, что клиентские сертификаты импортированные в браузеры/soapUI проходят проверку
и успешно авторизуются на сервере (в soapUI происходит успешный вызов сервиса). Серверный сертификат является самоподписанным (поэтому в контексте включена соответсвующая опция), все сертификаты были сгенерированы на текущей версии openssl. Настройки ssl.conf дефолтные.


При попытке подключения ssl пишет в лог:
[ssl:info] [pid 2970] [client 127.0.0.1:57633] AH01964: Connection to child 6 established (server test:443)
[ssl:debug] [pid 2970] ssl_engine_io.c(1212): (70014)End of file found: [client 127.0.0.1:57633] AH02007: SSL handshake interrupted by system [Hint: Stop button pressed in browser?!]
[ssl:info] [pid 2970] [client 127.0.0.1:57633] AH01998: Connection closed to child 6 with abortive shutdown (server test:443)


В результате проведенных опытов над пациентом было выяснено что такая ошибка падает при попытке передачи клиентского сертификата в параметре local_cert. Если этот параметр не передавать то клиент падает с ошибкой Error Fetching http headers, а в лог пишется:
[ssl:info] [pid 1471] SSL Library Error: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate -- No CAs known to server for verification? (собственно как я понимаю, тут все закономерно, все упало потому что небыло передано сертификата)

Если же выключить опцию SSLVerifyClient require, и не передавать сертификат, то все работает на ура.


Получается что при попытке отдать сертификат клиент сам рвет соединение во время хэндшэйка... Но вот почему он это делает ума не приложу(


Спасибо всем кто дочитал этот длиннопост до конца!
Заранее благодарен за ваши ответы, мысли, гайды и конструктивную критику!
...
Рейтинг: 0 / 0
Авторизация SOAP клиента при помощи SSL сертификата
    #38725286
На будущее, вдруг у кого-то возникнет такая же проблема. .pem файл, который вы отдаете soap клиенту, должен содержать приватный ключ этого сертификата т.е. в нем должны содержаться секции
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Авторизация SOAP клиента при помощи SSL сертификата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]