Ответ 1
Мне удалось получить эту работу, но есть некоторые странности, о которых мне интересно. В частности, необходимость объединить клиентский сертификат и закрытый ключ в один файл для отправки вместе с запросом на мыло, а также с парольной фразой сертификата, была нарушена просьба, хотя в документации по ядру PHP явно включена эта опция. Если кто-нибудь будет проинформирован о том, как улучшить это, я бы хотел его услышать.
1) Создайте сертификаты клиента и сервера OpenSsl и подпишите их с помощью центра сертификации. При создании сертификата не присваивайте им кодовую фразу, просто нажмите кнопку ввода в этой точке.
2) Импортируйте файл центра сертификации сервера в хранилище сертификатов Machine под доверенным корнем. Вы можете получить это, используя команду MMC в командной строке, а затем добавьте оснастку "Сертификаты".
3) Импортируйте сертификат сервера в хранилище личных хранилищ личных данных
4) Импортируйте сертификат клиента в локальную учетную запись Личный магазин. Вы можете сделать это, набрав certmgr.msc в командной строке.
5) Убедитесь, что Apache имеет версию PHP для 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. Вы должны увидеть успешное соединение с сервисом с ответом, соответствующим ожидаемым результатам вашего
Метод веб-службы.