【问题标题】:How to call a secure webservice using SoapClient if Host is not trusted如果主机不受信任,如何使用 SoapClient 调用安全 Web 服务
【发布时间】:2011-10-21 09:03:26
【问题描述】:

我想使用 PHP 的 SoapClient 连接到托管在安全 HTTP 中的 Web 服务。托管此 Web 服务的服务器没有 SSL 证书。当我尝试使用 SoapClient 连接时,出现以下错误 -

“警告:SoapClient::__construct() [function.--construct]: SSL: 致命协议错误”。

SOAP 错误字符串 -> SOAP-ERROR:解析 WSDL:PHP-SOAP 不支持传输“http://schemas.microsoft.com/soap/tcp”

SOAP 错误代码:WSDL。

我的代码

try {
            $client = new SoapClient('https://mywebservicelink?wsdl', array(
                'allow_self_signed' => 1,
                'verify_peer'       => 0,
                'trace'             => 1,
                'exceptions'        => 1,
            ));


            echo 'SOAP OBJECT<br />';
            echo '<pre>';
            print_r($client);
            echo '*****************<br />';
        } catch (Exception $e) {
            echo '<pre>';
            die(print_r($e));
       }

希望这些信息就足够了。 任何人请告诉我为什么我会收到这样的错误?是因为证书问题吗? 证书(crt文件)?

感谢您的帮助

【问题讨论】:

    标签: php web-services soap-client


    【解决方案1】:

    您的意思是,提供服务的服务器没有安装 SSL 证书。然后你问为什么你不能用安全链接 https://...

    我想你自己回答了这个问题:-) 服务器必须安装 SSL 证书才能接受安全连接。否则只能使用不安全的连接 http://...

    PHP SoapClient 也可以通过安全连接加载 WSDL。实际上,我在带有自签名证书的本地开发机器上使用它并且它可以工作。

    最近才在 PHP 5.5+ 中添加了新参数 ssl_method(可能的值:SOAP_SSL_METHOD_TLS、SOAP_SSL_METHOD_SSLv2、SOAP_SSL_METHOD_SSLv3 或 SOAP_SSL_METHOD_SSLv23)来指定某种对等验证,但我没有这方面的经验。

    但是,如果您的服务器已安装 SSL 证书并且您的 PHP SoapClient 仍然无法连接到它,您可以调整流上下文以禁用对等验证并接受自签名证书。有关该主题,请参阅 this thread

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2012-01-25
      • 2013-01-12
      • 2015-01-28
      相关资源
      最近更新 更多