Мне удалось заставить это работать, но есть некоторые странности, которые меня интересуют.В частности, необходимость объединения клиентского сертификата и закрытого ключа в один файл для отправки вместе с запросом Soap, а также парольной фразой сертификата нарушала запрос, хотя документация PHP Soap явно включает его в качестве опции.Если у кого-то есть сведения о том, как улучшить это, я бы хотел это услышать.
1) Создайте клиентские и серверные сертификаты OpenSsl и подпишите их центром сертификации.При создании сертификата не назначайте им парольную фразу, просто нажмите кнопку ввода в этой точке.
2) Импортируйте файл центра сертификации сервера в хранилище сертификатов компьютера под доверенным корнем.Это можно сделать, используя команду MMC в командной строке, а затем добавив оснастку «Сертификаты».
3) Импортируйте сертификат сервера в хранилище компьютеров Личное хранилище сертификатов
4) Импортсертификат клиента в локальном аккаунте Личного магазина.Вы можете сделать это, набрав certmgr.msc в командной строке.
5) Убедитесь, что у вас работает Apache с версией SSL PHP.Если у вас уже установлена не PHP-версия PHP, вы можете выполнить следующие шаги, чтобы настроить сервер Apache для работы с использованием SSL.
Внутри httpd.conff
a) Remove the comment ‘#’ at line : LoadModule ssl_module modules/mod_ssl.so
b) Remove the comment ‘#’ at the line inside `<IfModule ssl_module>`: Include /extra/httpd-ssl.conf
and move this line after the block `<IfModule ssl_module>…. </IfModule>`
Внутри php.ini
c) Remove the comment ‘;’ at the line which says: extension=php_openssl.dll
6) Настройте IIS для использования сертификата и SSL, используя следующие шаги:
a) Right click the 'Default Website' node choose 'Properties'
b) 'Directory Security' tab 'Server Certificate' button. Follow the wizard to select the certificate you imported into the store then complete the wizard and return to the 'Directory Security' tab.
c) Under 'Secure Communications' select the 'Edit' button.
d) Check the 'Require Secure Channel (SSL) checkbox.
7) Создание PHPЗапрос SOAP (метод test () должен быть допустимым методом в вашем веб-сервисе):
$wsdl = "https://localhost/MyService/myservices.asmx?wsdl";
$local_cert = "C:\\SoapCerts\ClientKeyAndCer.pem";
$soapClient = new SoapClient($wsdl, array('local_cert' => $local_cert));
$theResponse = $soapClient->test();
8) Поместите этот файл в каталог Apache.По умолчанию: 'C: \ Program Files \ Apache Group \ Apache2 \ htdocs'
9) Вам потребуется доступ к клиентскому сертификату.На этапах, которые вы предприняли для создания клиентских и серверных сертификатов, вы также создали файлы закрытых ключей.Откройте client_prv.pem (файл закрытого ключа клиента) и скопируйте содержимое в новый документ с помощью текстового редактора.Вероятно, безопаснее использовать что-то вроде Textpad, которое, мы надеемся, не добавит кучу специальных символов, парсеры сертификатов очень требовательны.Сразу после части с закрытым ключом поместите содержимое сертификата клиента (client_cer.pem), чтобы результирующий файл представлял собой неэкранированную копию закрытого ключа клиента и сертификата клиента
.Сохраните полученный файл в каталог, в который вы можете попасть из файла php.В приведенном выше примере результирующим файлом является файл
'C: \ SoapCerts \ ClientKeyAndCer.pem'.
9) Перейдите к localhost / nameOfYourFile.php.Вы должны увидеть успешное подключение к службе с ответом, совпадающим с ожидаемыми результатами от вашего
метода веб-службы.