Я работал с более старой версией OpenSSL (OpenSSL 0.9.8o), и мне пришлось использовать новые OpenSSL 1.0.1e-fips, так как я не смог подключиться к WSDL:
Message: SoapClient::SoapClient(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Мне нужно отключить проверку сертификатов SSL, я попробовал:
$client = new SoapClient("https://IP:443/sdk/vimService?wsdl", array( "trace" => 1, "location" => "https://IP:443/sdk/", "stream_context" => stream_context_create( array( 'ssl' => array( 'verify_peer' => false, 'allow_self_signed' => true, ) ) ) ) );
`
И это бросает:
Message: SoapClient::SoapClient(): Peer certificate CN=
localhost.localdom 'не соответствует ожидаемому CN = SAME IP AS IN SoapClient()'
Затем я добавил 'peer_name'=> 'localhost.localdom',
в stream_context
а затем он говорит, что файл XML пуст:
Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document
PHP 5.5
Okey, я смог найти проблему.
Вы можете избежать этого беспорядка, используя стабильную версию PHP 5.5
Недавно я узнал, что ошибка: «похоже, что у нас нет XML-документа» вызвана из-за версии PHP – PHP 5.6 в 5.5 работает как шарм.
1) Удалите проверку сертификата SSL в PHP 5.6:
В версии 5.6 SSL-сертификация была включена по умолчанию, поэтому, если вы хотите ее отключить, вы должны передать поток контекста:
"stream_context" => stream_context_create( array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ) ) )
2) ?wsdl
и добавил .wsdl
вместо (с ?wsdl
, это не сработало для меня)
<?php $client = new SoapClient("https://IP:443/sdk/vimService.wsdl", array( "trace" => 1, "location" => "https://IP:443/sdk/", 'exceptions' => 1, "stream_context" => stream_context_create( array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ) ) ) ) ); $soapmsg["_this"] = array( "_" => "ServiceInstance", "type" => "ServiceInstance"); $result = $client->RetrieveServiceContent($soapmsg); $ServiceContent = $result->returnval; $soapmsg = NULL; $soapmsg["_this"] = $ServiceContent->sessionManager; $soapmsg["userName"] = "USERNAME"; $soapmsg["password"] = "PASSWORD"; $result = $client->Login($soapmsg); $UserSession = $result->returnval; echo "User, " . $UserSession->userName . ", successfully logged in!\n"; $soapmsg = NULL; $soapmsg["_this"] = $ServiceContent->sessionManager; $result = $client->Logout($soapmsg);
В моем случае stream_context_create не работал.
Поэтому я загружаю этот файл здесь: https://curl.haxx.se/ca/cacert.pem
и поместил его в мой localhost как: F: \ xampp \ apache \ cert.pem и дал тот же путь для openssl.cafile = F: \ xampp \ apache \ cert.pem в моем phpini
Это сделало localhost для получения сертификата, и все отлично работало … !! Проводя это, если это может помочь кому-то пройти мою ситуацию.