2011-11-23 43 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三個版本進行連接。