PHP SoapClient是否支持HTTPS连接

kil*_*hip 2 php https soap

我在Windows上使用XAMPP,并尝试与PHP soap扩展SoapClient一起使用。我正在尝试使用以下代码加载HTTPS站点中托管的WSDL文件

<?php
    $myClient=new SoapClient("https://smi.sp.f-secure.com/smi/5.1/services/EchoService?wsdl");
?>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

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

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

Wireshark屏幕截图

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

因此,肯定是带有SOAP扩展和SSL通信的东西。有人可以帮忙吗?提供提示寻找什么?

nai*_*rch 5

要变通解决此错误,您可以停用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,
        ],
    ]),
]);
Run Code Online (Sandbox Code Playgroud)

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

<?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,
        ],
    ]),
]);
Run Code Online (Sandbox Code Playgroud)