Я пытаюсь создать соединение PHP SOAP с .NET Web Service с самозаверяющим сертификатом, чтобы заблокировать службу для связи через HTTPS. Я продолжаю получать ошибки, и я не уверен, что это связано с тем, как я создаю сертификат, настройку Apache/PHP, как пытаюсь установить SOAP-запрос или что-то еще. Если у кого есть какие-то указатели, они будут очень благодарны. Спасибо заранее.
Создание сертификата
Вот как я создаю сертификат.
-
Создайте доверенный закрытый закрытый ключ:
genrsa -out ca_authority_prv.pem 2048
-
Создайте доверенный корневой сертификат:
req -new -key ca_authority_prv.pem -x509 -out ca_authority_cert.pem
-
Сделать доверенным органом сертификата:
x509 -in ca_authority_cert.pem -out ca_authority_trust.pem -trustout
-
Выйдите из OpenSSL и создайте серийный файл:
echo 1000 > ca_authority.srl
-
Создайте закрытый ключ клиента:
genrsa -out Client_prv.pem 2048
-
Создайте запрос клиента:
req -new -key Client_prv.pem -out Client_req.pem
-
Подпишите запрос клиента с помощью CA:
x509 -req -CA ca_authority_trust.pem -CAserial ca_authority.srl -CAkey ca_authority_prv.pem-in Client_req.pem -out Client_cert.pem
-
Сделать pfx для сертификата клиента
pkcs12 -export -in Client_cert.pem -inkey Client_prv.pem -out Client_cert.pfx
Настройка IIS
После создания этого сертификата я выполняю те же действия для сертификата сервера и:
-
Добавить доверенный корневой центр сертификации в надежный корневой магазин
-
Добавить сертификат сервера в хранилище
-
Настройка IIS для использования сертификата сервера и требуемых сертификатов клиента
Запрос SOAP PHP
Это код, который я использую для установки запроса SOAP PHP (ниже приведена ошибка):
$wsdl = "https://localhost/MyService/MyService.asmx";
$local_cert = "C:\\Certs\client_cert.pem";
$passphrase = "openSaysMe";
$soapClient = new SoapClient($wsdl, array('local_cert'=> $local_cert,'passphrase'=>$passphrase));
$theResponse = $soapClient->test();
ОШИБКА
Warning: SoapClient::SoapClient() [soapclient.soapclient]: Unable to set private key file `C:\Certs\client_cert.pem' in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient() [soapclient.soapclient]: failed to create an SSL handle in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient() [soapclient.soapclient]: Failed to enable crypto in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient(https://localhost/MyService/MyService.asmx) [soapclient.soapclient]: failed to open stream: operation failed in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "https://localhost/MyService/MyService.asmx" in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://localhost/MyService/MyService.asmx'
ERROR LOG
PHP Warning: SoapClient::SoapClient() [<a href='soapclient.soapclient'>soapclient.soapclient</a>]: failed to create an SSL handle in C:\\Program Files\\Apache Group\\Apache2\\htdocs\\soapWithAuth.php on line 54