带有SSL证书的PHP SOAP客户端

问题描述 投票:5回答:3

我正在尝试使用以下代码设置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"的异常。

与对方通话后,他们确认有一个请求传入,但他们正在记录此错误:ssl handshake interrupted by system [hint: stop button pressed in browser?!]

由于到目前为止我在网上找不到任何有用的信息,所以我想请你们对此事有所了解。

任何建议都可以尝试?我正在运行PHP 5.3.8,并且服务器的IP地址在远程方的防火墙中列出为白色。

php ssl soap wsdl ssl-certificate
3个回答
5
投票

我已经解决了这个问题。我认为,由于与此问题相关的问题数量众多,并且解决方案数量众多,因此其他人将从该解决方案中受益。去:

我使用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


0
投票

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
投票

相同建议:

  1. 我使用SoapClient连接SSL服务,并且在不指定“端点” URL的情况下一切正常。然后,我建议您尝试不使用此选项;

  2. php SoapClient有一个名为“ ssl_method”的选项,您可以在其中更改此协议的某些变体。如果您知道使用哪种协议,请尝试更改/指定此参数;

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

© www.soinside.com 2019 - 2024. All rights reserved.