2011-11-23 79 views
3

我正试图在我的web应用程序中实现基于PHP SOAP的Web服务。我收到了一系列的错误,这些错误似乎指向了图书馆与OpenSSL(或Curl等)之间的冲突,我通过在互联网上搜索类似的错误已经理解了这一点,但认为图书馆是问题的普遍共识,我找不到解决办法。与OpenSSL和PHP 5.3.3的库冲突?

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 Service API中,因为他们希望避免任何问题,并且它通过在同一台计算机上安装MAMP来工作。所以我认为这是Apache/PHP和Curl/OpenSSL之间的设置问题。

任何指向如何建立实际问题,并纠正它,将不胜感激。

回答

0

这可能是因为您尝试连接启用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 

如果不工作,然后尝试创建包装类,类似于this one found in the PHP documentation

您应该添加相似的一行:

curl_setopt($handle, CURLOPT_SSLVERSION, 3); 

callCurl函数内部强制SOAP到SSL三个版本进行连接。