我正在使用旧版本的OpenSSL(OpenSSL 0.9.8o),由于无法连接到WSDL,我被迫使用较新的OpenSSL 1.0.1e-fips:
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版本引起的-5.5中的PHP 5.6就像一个魅力。
1)在PHP 5.6中删除SSL证书检查:
在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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句