簡體   English   中英

帶有 SSL 證書的 PHP SOAP 客戶端

[英]PHP SOAP client with certificates over SSL

我正在嘗試使用以下代碼設置 Soap 客戶端:

<?php
$wsdl           = 'https://domain.com/?wsdl';
$endpoint       = 'https://domain.com';
$certificate    = dirname(__FILE__) . '/CertWithKey.pem';
$password       = 'pwd';

$options = array(
    'location'      => $endpoint,
    'keep_alive'    => true,
    'trace'         => true,
    'local_cert'    => $certificate,
    'passphrase'    => $password,
    'cache_wsdl'    => WSDL_CACHE_NONE
);

try {
    $soapClient = new SoapClient($wsdl, $options);
} catch(Exception $e) {
    var_dump($e);
}

我得到了一個帶有 .crt 認證文件的 .p12 密鑰文件。 使用 openssl 我已將 .p12 文件轉換為 .pem 文件,然后將其與 .crt 文件合並。 CertWithKey.pem 對我來說看起來不錯,文件中有兩個證書塊。

無論我嘗試做什么,我都不斷收到消息SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://domain.com/?wsdl' : failed to load external entity "https://domain.com/?wsdl"的異常SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://domain.com/?wsdl' : failed to load external entity "https://domain.com/?wsdl"

在與遠程方通話后,他們確認有一個請求進來,但他們記錄了這個錯誤: ssl handshake interrupted by system [hint: stop button pressed in browser?!]

由於到目前為止我沒有在網上找到任何有用的信息,所以我想請教大家對此事的一些見解。

有什么建議可以嘗試嗎? 我正在運行 PHP 5.3.8,並且服務器的 IP 地址在遠程方的防火牆中被列入白名單。

我已經解決了這個問題。 我認為,由於有關此問題的問題數量和不同解決方案的數量,其他人將從該解決方案中受益。 開始:

我使用openssl CLI 程序將 .p12 密鑰文件轉換為 .pem 密鑰文件。 訣竅是轉換發生的方式。

首先,我用這個命令轉換了它,我遇到了問題中描述的問題:

openssl pkcs12 -in key.p12 -out key.pem -nodes -clcerts

雖然下面的命令做了實際的技巧:

openssl pkcs12 -in key.p12 -out key.pem -clcerts

有關更多信息,請參閱我使用的來源: https : //community.qualys.com/docs/DOC-3273

J'ai lemêmeproblème。 $ wsdl =' http:// partenaire / refff / services / IviStofft?wsdl '; $ password ='amydtxuhdp#322';

    $options = array(
        'location' => $endpoint,
        'keep_alive' => true,
        'trace' => true,
        'local_cert' => $cert,
        'passphrase' => $password,
        'cache_wsdl' => WSDL_CACHE_NONE
    );

   try
   {
       $client = new SoapClient($wsdl, $options);


   } 
   catch (Exception $ex) 
   {
         var_dump($e);
   }

同樣的建議:

  1. 我使用 SoapClient 連接 SSL 服務,一切正常,無需指定“端點”URL。 那么我建議您嘗試不使用此選項;

  2. php SoapClient 有一個名為“ssl_method”的選項,您可以在其中更改此協議的某些變體。 如果您知道使用的是什么協議,請嘗試更改/指定此參數;

  3. 在參數列表中指定“verifypeer => false”和“verifyhost => false”;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM