PHP SoapClient over selfsigned certificate, SOAP-ERROR: 解析 W


PHP SoapClient over selfsigned certificate, SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://

我在网上浏览了三天,仍然无法解决我的问题......这就是为什么我寻求你的帮助:)

我尝试使用自签名证书通过https调用Web服务,并收到以下错误:肥皂错误:解析WSDL:无法从"https://

...

我的代码 :

$streamContext = stream_context_create(array(
    'ssl' => array(
        'verify_peer' => false,
        'allow_self_signed' => true
     )
));
$client = new SoapClient("https://DOMAIN/ws.php?wsdl", array(
    'trace' => true,
    'stream_context' => $streamContext
));
$client->method($params);

我试图:

  • 更改"verify_peer"和"allow_self_signed"选项的值;
  • 将数组中的"ssl"键替换为stream_context"https";
  • 在本地加载 WSDL 文件,但出现以下错误:无法连接到主机(我的端点:https://DOMAIN/ws.php);
  • 清除我的客户端缓存;
  • 使用Zend_Soap_Client和 nusoap 库。

另外,我使用以下命令"ping DOMAIN"和"telnet DOMAIN 443"检查了客户端和服务器之间的连接,一切正常。

似乎忽略了"stream_context"选项或问题出在其他地方?!这是一个php错误吗?!

所有建议将不胜感激。感谢

我遇到了一个非常相似的问题,我'verify_peer_name' => false添加到流上下文中。 所以...

$streamContext = stream_context_create(array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
     )
));

编者按:禁用 SSL 验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以模拟受信任的端点(例如 GitHub 或其他远程 Git 主机),并且您将容易受到中间人攻击。在将其用作解决方案之前,请确保您完全了解安全问题。