2016-11-11 115 views
2

我有一個連接PHP和需要使用SSL證書的API的問題。問題是當我運行我的PHP代碼時,我得到「無法連接到主機」。具有兩個證書文件和「無法連接到主機」的SOAP

我可以使用curl這樣連接到服務提供商:

$wsdl  = 'https://example.com/Case.svc'; 
$certFile = getcwd() . '/certificate.crt'; 
$keyFile = getcwd() . '/key.pem'; 
$password = 'password'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,   $wsdl); 
curl_setopt($ch, CURLOPT_SSLCERT,  $certFile); 
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $password); 
curl_setopt($ch, CURLOPT_SSLKEY,  $keyFile); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
$output = curl_exec($ch); 

var_dump(curl_errno($ch)); 
var_dump(curl_error($ch)); 

但是,我沒能做到這一點使用SOAP:

$options=array(
      'soap_version' => SOAP_1_2, 
      'trace' => true, 
      'cache_wsdl' => WSDL_CACHE_NONE, 
      'exceptions' => 1, 
      'encoding' => 'UTF-8', 
      'stream_context'=>stream_context_create(
          array(
          'ssl'=>array(
           'verify_peer'=>true 
           ,'allow_self_signed'=>false 
           ,'cafile'=>'certificate.crt' 
           ,'verify_depth'=>5 
           ) 
          ) 
         ), 
         'local_cert' => 'key.pem', 
      'passphrase' => 'password',  
     ); 

    $client = new SoapClient("Case.wsdl", $options); 

它導致「無法連接到主機「。

問題可能出現在證書本身中,也許我需要將兩個證書合併到一個文件中。我可以看到許多人有同樣的問題,他們中的大多數人都沒有得到答案。

爲什麼SOAP代碼返回「無法連接到主機」,我該如何解決?

回答

0

一些地方爲你開始:

1)什麼是certificate.crt?它是客戶證書還是CA證書?您正在使用CURLOPT_SSLCERT(設置客戶端證書),但正在使用SoapClient中的'cafile'文件指令(設置CA證書文件)。

2)您正在使用CURLOPT_SSL_VERIFYPEER = false,但在使用verify_peer的其他片段中。

因此,嘗試使用這些更改進行調試,使其具有相同類型的環境。

+0

感謝重播, 如對(1)I有一個與file.pfx密碼,我運行下面的命令來提取2文件出它 OpenSSL的PKCS12 -in cert_name.pfx -nocerts -out cert_name。鍵和 OpenSSL的PKCS12 -in cert_name.pfx -clcerts -nokeys退房手續certificate.crt 在我運行下面的commanf OpenSSL的RSA -in cert_name.pem退房手續newkey.pem 所以我輸了,我真的不知道現在我有 – marvillous

+0

至於(2)我試圖設置'verify_peer'=> false,我得到了同樣的錯誤 – marvillous

0

如果您的證書是自簽名的,則不必設置cafile。 cafile僅適用於CA鏈。 的local_cert需要有兩種:連續證書(葉)和私鑰例如爲:

-----BEGIN CERTIFICATE----- 
MIIDsDCCApgCAWUwDQ.... 
-----END CERTIFICATE----- 
-----BEGIN RSA PRIVATE KEY----- 
MIIEpAIBAAKCAQEAsMGypi... 
-----END RSA PRIVATE KEY----- 

出於某種原因,自簽名證書,我在Ubuntu上不工作,但在Mac OS上正常工作。