通过SSL提供证书的PHP SOAP客户端

通过SSL提供证书的PHP SOAP客户端,php,ssl,soap,wsdl,ssl-certificate,Php,Ssl,Soap,Wsdl,Ssl Certificate,我正在尝试使用以下代码设置Soap客户端: <?php $wsdl = 'https://domain.com/?wsdl'; $endpoint = 'https://domain.com'; $certificate = dirname(__FILE__) . '/CertWithKey.pem'; $password = 'pwd'; $options = array( 'location' => $endp

我正在尝试使用以下代码设置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);
}
同样的建议:

  • 我使用SoapClient连接SSL服务,在不指定“端点”URL的情况下,所有这些都可以正常工作。那么我建议你不要选择这个选项

  • PHPSOAPClient有一个名为“ssl_method”的选项,您可以在其中更改该协议的一些变体。如果您知道所使用的协议,请尝试更改/指定此参数

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


  • 我已经解决了这个问题。我认为,由于与这个问题有关的问题数量和不同解决方案的数量,其他人将从该解决方案中受益。下面是:

    我使用
    openssl
    CLI程序将.p12密钥文件转换为.pem密钥文件。诀窍在于转换发生的方式

    首先,我用这个命令转换了它,我遇到了问题中描述的问题:

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

    下面的命令执行了实际操作:

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


    有关更多信息,请参阅我使用的来源:

    谢谢您的回复<代码>1:
    我在没有端点的情况下也尝试过;没有运气<代码>2:由于我的PHP版本,我无法使用ssl\u方法<代码>3:我是否错了,或者verifypeer和verifyhost是否未记录参数(或者至少它们不在文档中:)。提供它们也没有区别。
    在参数列表中指定“verifypeer=>false”和“verifyhost=>false”这意味着禁用安全性。总是一个坏主意如果你看一下php soap扩展的c源代码,你会发现verifyhost和verifypeer都不受支持,所以这里的建议#3应该被忽略。我还试图向服务器发送soap请求。我面临着一个类似的问题,无法通过php应用程序与服务器通信。但是通过soapgui工作。我有一个.p12文件,我试图通过转换成.pem文件来使用它。当我创建SOAP客户端对象时,我得到错误:SOAP-error:解析WSDL:无法从https://?WSDL:无法加载外部实体https://?WSDL您能告诉我这里出了什么问题吗?如果您按照我的答案进行操作,并且密钥和crt文件成功合并,远程主机可能启用了防火墙,并且正在阻止您的IP地址。否则我还说不出来,也许你应该问个问题。我也有同样的问题。我遵循了@Ben提供的确切步骤。p12必须使用提供的链接转换为.pem。但我仍然得到错误:curl:(58)无法加载客户端证书-8018奇怪的是,我发现我提供的密码是3位数字“123”,而我必须提供6个字母字符的有效密码。所以我相信,应该有一个长度合适的密码短语(不知道最小长度)。下一个缺少的是“local_cert”,“passphrase”选项,应该在SoapClient对象初始化中提供。