2010-11-05 68 views
2

在Windows上嘗試使用PHP SOAP擴展連接到SSL端點時,我收到SoapFault「無法連接到主機」。客戶證書不是服務的要求。如何使用PHP SOAP擴展獲取SSL連接?

$sslOptions = array(
    'ssl' => array(
     'cafile' => "c:/inetpub/wwwroot/eServices/Server_DSA_Public_Certificate.pem", 
     'allow_self_signed' => true, 
     'verify_peer' => false, 
    ), 
);  
$sslContext = stream_context_create($sslOptions); 

$clientArguments = array(
    'stream_context' => $sslContext, 
    'trace' => true, 
    'exceptions' => true,   
    'encoding' => 'UTF-8', 
    'soap_version' => SOAP_1_1, 
); 

$oClient = new WSSoapClient("c:/inetpub/wwwroot/eServices/svc.wsdl", $clientArguments); 
// WSSoapClient extends SoapClient to add a WS-Security UsernameToken header  

$oClient->__setUsernameToken("myusername", "mypassword"); 
return $oClient->__soapCall($operation, $request); 

我轉換爲.pem格式的,我是給和我傳球,在爲「CACERT」自簽名服務器證書(.CER)。

能夠使用soapUI和wsdl完全訪問服務。

問題:我需要將服務器證書放入某個信任存儲區嗎?我確實已經使用Internet Explorer將其添加到「受信任的根證書頒發機構」中。

問題:通過傳遞'cacert',PHP知道它可以信任服務器嗎?

任何幫助或建議將不勝感激。

回答

0

當我在Apache下運行代碼(使用XAMPP)時,它第一次工作。我的問題一定是在IIS或PHP的配置中。

設置cacert是多餘的。