使用 Web 服务时出错::SoapClient(): SSL 操作失败,代码为 1

Posted

技术标签:

【中文标题】使用 Web 服务时出错::SoapClient(): SSL 操作失败,代码为 1【英文标题】:Error consuming Web Service: :SoapClient(): SSL operation failed with code 1 【发布时间】:2013-08-23 02:03:13 【问题描述】:

我正在尝试使用 Web 服务,我的朋友在 windows 7 中使用 xampp 进行了测试并且正在工作。他告诉我他安装了一个自签名证书。 但是我被卡住了,我收到了这个错误:

警告:SoapClient::SoapClient():SSL 操作失败,代码为 1。OpenSSL 错误消息: 错误:1408F119:SSL 例程:SSL3_GET_RECORD:解密失败或错误记录 mac 在 /var/www/project/lib/Zend/Soap/Client/Common.php 第 51 行

警告:SoapClient::SoapClient(): 无法在第 51 行的 /var/www/project/lib/Zend/Soap/Client/Common.php 中启用加密

警告:SoapClient::SoapClient(https://url.com/webservice?wsdl):打开流失败:/var/www/eph_me_113/lib/Zend/Soap/Client/Common.php 第 51 行的操作失败

警告:SoapClient::SoapClient(): I/O 警告:无法加载外部实体“https://url.com/webservice?wsdl" 在 /var/www/eph_me_113/lib/Zend/Soap/Client/Common.php 的第 51 行

我尝试使用 certutils 工具在我的机器上安装 .cert,如下所示:

http://blog.avirtualhome.com/adding-ssl-certificates-to-google-chrome-linux-ubuntu/

之后我在浏览器中看到没有红页警告的 wsdl。浏览器告诉我现在“实体有效”。但我仍然有同样的错误。

我也尝试在我的客户端中添加它。

$opts = array(
        'ssl'   => array(
                'verify_peer'          => false,
                'allow_self-signed' => true,                        
                'ciphers' => "SHA1"
            )
        );
        $streamContext = stream_context_create($opts);

$params = array(    
            'features' => SOAP_SINGLE_ELEMENT_ARRAYS,                
            'stream_context'     => $streamContext,
            'cache_wsdl' => NULL,                    
        );

$client = new SoapClient($url, $params);

我很困在这里,所以,我希望有人能帮助我。

注意:我使用的是 openssl 1.0.1e 和 Debian 7。

【问题讨论】:

【参考方案1】:

如果您碰巧有更高版本,请尝试降级到 PHP 5.3

【讨论】:

问题出在 openssl 版本,1.0.1e 版本造成了这些错误。当我将 php 的版本从 5.4.4 降级到 5.3.3 时,openssl 版本更改为 0.9.8。

以上是关于使用 Web 服务时出错::SoapClient(): SSL 操作失败,代码为 1的主要内容,如果未能解决你的问题,请参考以下文章

PHP SoapClient 超时

为啥 SoapClient 在文档/文字样式中使用 WSDL 返回带有额外关键元素的数组?

python 有没有php里面的soapclient这样的东西

为什么在文档/文字样式中使用WSDL的SoapClient返回带有额外键元素的数组?

USI 网络服务 SOAP 格式

使用 Web 服务时出错:现有连接被强行关闭