库与OpenSSL和PHP 5.3.3冲突


Library conflict with OpenSSL and PHP 5.3.3?

我正在尝试实现一个基于PHP SOAP的web服务到我的web应用程序。我得到了一系列的错误,这些错误似乎指向了关于OpenSSL(或Curl等)的库的冲突,我通过在互联网上搜索类似的错误来理解这一点,但是认为库是问题的普遍共识,我找不到解决方案。

Warning (2): SoapClient::__doRequest() [soapclient.--dorequest]: SSL operation failed with code 1. OpenSSL Error messages:
error:140773F2:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert unexpected message [CORE/vendors/Startrack/WSSecurity.php, line 110]
Warning (2): SoapClient::__doRequest() [soapclient.--dorequest]: Failed to enable crypto [CORE/vendors/Startrack/WSSecurity.php, line 110]
Warning (2): SoapClient::__doRequest() [soapclient.--dorequest]: connect() failed: Unspecified error [CORE/vendors/Startrack/WSSecurity.php, line 110]
Notice (8): Undefined property: SoapFault::$detail [APP/controllers/startrack_controller.php, line 38]
Notice (8): Trying to get property of non-object [APP/controllers/startrack_controller.php, line 38]
Could not connect to host

这是从Mac OSX Lion服务器提供的。已安装PHP 5.3.3,并开启了OpenSSL、Curl和SOAP的扩展。这是在CakePHP中构建的,它解释了上面错误消息的语法。我使用的是已经提供的PHP Web服务包。以上工作通过MAMP托管时,但我希望不必依赖MAMP。

我能找到的唯一不兼容是在OpenSSL头和库版本之间,但从我所知道的这应该不是一个问题?

OpenSSL Library Version OpenSSL 0.9.8r 8 Feb 2011
OpenSSL Header Version  OpenSSL 0.9.8l 5 Nov 2009

我正在试图理解假设的"冲突"是否在我的服务器和远程服务器之间?WSDL文件包含在Web服务API中,因为他们希望避免任何问题,并且它通过在同一台计算机上安装MAMP来工作。所以我认为这是Apache/PHP和Curl/OpenSSL之间的设置问题。

请指教如何确定实际问题并加以纠正。

这可能是因为您正在尝试连接启用SSL 3的服务器,该服务器可能(?)已禁用SSL 2。

尝试在命令行上像这样连接到服务器:

 openssl s_client -connect {SERVER NAME OR IP}:443 -state

如果不工作,然后尝试这样连接:

 openssl s_client -ssl3 -connect {SERVER NAME OR IP}:443 -state

如果这样做有效,那么尝试创建一个包装器类,类似于PHP文档中的这个。

你应该添加一行类似于:

 curl_setopt($handle, CURLOPT_SSLVERSION, 3);

callCurl函数内强制SOAP通过ssl的版本3进行连接。