PHP SoapClient是否支持HTTPS连接

时间:2015-01-23 12:03:00

标签: php soap https

我在Windows上使用XAMPP并尝试使用PHP soap扩展SoapClient。我尝试使用以下代码

加载HTTPS站点中托管的WSDL文件
<?php
    $myClient=new SoapClient("https://smi.sp.f-secure.com/smi/5.1/services/EchoService?wsdl");
?>

我收到以下错误:

  

致命错误:未捕获的SoapFault异常:[WSDL] SOAP-ERROR:解析WSDL:无法从&#39; https://smi.sp.f-secure.com/smi/5.1/services/EchoService?wsdl&#39;加载:未能加载外部实体&#34; https://smi.sp.f-secure.com/smi/5.1/services/EchoService?wsdl&#34;在C:\ xampp \ htdocs \ dev \ w3schools \ soapClient \ index.php:2堆栈跟踪:
  #0 C:\ xampp \ htdocs \ dev \ w3schools \ soapClient \ index.php(2):SoapClient-&gt; SoapClient(&#39; https://smi.sp ....&#39;)
  在第2行的C:\ xampp \ htdocs \ dev \ w3schools \ soapClient \ index.php中抛出#1 {main}

现在,我在请求期间进行了网络捕获,发现HTTPS通信在SSL级别上无效。 Wireshark在服务器密钥交换机上显示一个数据包,我的工作站响应:

  

TLSv1记录层:警报(级别:致命,描述:证书未知)

     

Wireshark Screenshot

在同一台计算机上使用nuSOAP客户端或soapUI实用程序,我能够正常连接到该服务。所以我猜没有证书问题。

所以它肯定是SOAP扩展和SSL通信的东西。有人可以帮忙吗?给出提示要查找的内容?

4 个答案:

答案 0 :(得分:3)

要解决此错误,您可以停用SSL证书验证。但请记住,这只应针对测试用例进行,因为此会使您的连接不安全

您可以在实例化SoapClient时传递流上下文:

<?php
$myClient = new SoapClient("https://smi.sp.f-secure.com/smi/5.1/services/EchoService?wsdl", [
    'stream_context' => stream_context_create([
        'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ]),
]);

如果您拥有有效的证书,但它是自签名的,则还有另一种解决方案(更安全):

<?php
$myClient = new SoapClient("https://smi.sp.f-secure.com/smi/5.1/services/EchoService?wsdl", [
    'stream_context' => stream_context_create([
        'ssl' => [
            'allow_self_signed' => true,
        ],
    ]),
]);

答案 1 :(得分:0)

PHP Soap Extension,SoapClient支持HTTPS连接。

我的问题肯定是一个错误,我正在处理XAMPP 5.6.3(PHP 5.6.3,Apache 2.4.10)

当我部署XAMPP 5.5.19(PHP 5.5.19,Apache 2.4.10)时,我的代码工作正常。 WSDL文件从HTTPS站点下载并正常处理。

答案 2 :(得分:0)

它与php 5.6中的这一变化有关:http://php.net/manual/en/migration56.openssl.php

我在使用php 5.6的Windows上遇到了同样的问题,它在使用php 5.6的Linux上运行良好。

您可以使用功能openssl_get_cert_locations查看证书位置。

到目前为止,我无法找到解决方案。

答案 3 :(得分:0)

在以前使用PHP 5.3.3的Windows服务器上遇到与PHP 5.6.9相同的问题时没有问题。 检查建议的每个设置(加载扩展),你知道吗,之后我发现在命令行上运行脚本没有问题......

其他: 尝试捕获SOAP异常时,它会失败。 我希望在这个版本中修复了关于没有考虑套接字超时的SOAP客户端的老旧的https错误,但是SOAP客户端的问题似乎仍在继续。