通过SSL使用证书的PHP SOAP客户端

fd3cxomn  于 2023-02-19  发布在  PHP
关注(0)|答案(3)|浏览(165)

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

我得到了一个.p12密钥文件和一个. crt证书文件。我使用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?!].
由于我没有找到任何有用的信息在网上到目前为止,我想问你们一些见解的问题。
有什么建议吗?我运行的是PHP5.3.8,服务器的IP地址在远程方的防火墙中是白名单。

lo8azlld

lo8azlld1#

我已经修复了这个问题。我认为,由于关于这个问题的问题和不同的解决方案的数量,其他人将受益于解决方案。
我使用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

wgx48brx

wgx48brx2#

$mode = array(
            'soap_version' => 'SOAP_SSL_METHOD_SSLv2',  // use soap 1.2 client
            'trace' => 1,
            'stream_context' => stream_context_create(
            array(
                'ssl' => array(
                    'crypto_method' =>  STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
                    'verify_peer' => false,  // don't care about which company
                    'verify_peer_name' => false  // or company name
                    )   
                )
            )
        );

        $client = new SoapClient($x, $mode);
w7t8yxp5

w7t8yxp53#

相同建议:
1.我使用SoapClient来连接SSL服务,没有指定“端点”URL也能正常工作。那么我建议你不要使用这个选项;

  1. php SoapClient有一个名为“ssl_method”的选项,你可以在这里修改这个协议的一些变体。如果你知道使用的是什么协议,请尝试修改/指定这个参数;
    1.在参数列表中指定“验证对等机=〉假”和“验证主机=〉假”;

相关问题