我有一個連接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代碼返回「無法連接到主機」,我該如何解決?
感謝重播, 如對(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
至於(2)我試圖設置'verify_peer'=> false,我得到了同樣的錯誤 – marvillous