如果主机不受信任,如何使用SoapClient调用安全web服务


How to call a secure webservice using SoapClient if Host is not trusted

我想使用PHP的SoapClient连接到托管在安全HTTP中的web服务。该服务器(承载此web服务的服务器)没有SSL证书。当我尝试使用SoapClient连接时,我得到以下错误-

"警告:SoapClient::__construct() [function。——construct]: SSL: fatal protocol error".

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文件)?

感谢您的帮助

您的意思是,提供服务的服务器没有安装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仍然无法连接到它,您可以调整流上下文以禁用对等验证并接受自签名证书。