【问题标题】:php calling soap function using client certificatephp使用客户端证书调用soap函数
【发布时间】:2015-05-03 17:36:46
【问题描述】:

我遇到了调用soap函数的问题。我收到错误“无法连接到主机”。我正在使用“wamp server”、“php version 5.3.13”和“apache version 2.2.22”。

我有 .p12 格式的客户端证书,本地系统上可用的 wsdl 文件,我已经使用soapUI-m-snapshot 测试了soap 调用。它工作正常!但是当我尝试使用 php“SoapClient”时,得到“无法连接到主机”。 我正在使用以下肥皂选项

$soapclient_options = array();
$soapclient_options['cache_wsdl'] = 'WSDL_CACHE_NONE';
$soapclient_options['local_cert'] = $certificatePath;
$soapclient_options['passphrase'] = $api_certificate_passphrase;
$soapclient_options['trace'] = true;
$soapclient_options['connection_timeout'] = 15;
$soapclient_options['ssl_method'] = 'SOAP_SSL_METHOD_SSLv3';
$soapclient_options['location'] = 'api location';

$client = new SoapClient($wsdl_path, $soapclient_options);
$client->__setLocation($soapclient_options['location']);

我做错了什么吗? 有人请建议我,并提前非常感谢。

【问题讨论】:

    标签: php soap ssh certificate handshake


    【解决方案1】:

    PHP Soap 客户端只接受 pem 证书。您可以使用以下方法隐藏您的证书:

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

    【讨论】:

    • 谢谢格雷格,我在某处找到了同样的东西并为我工作。
    • 您能否将我的答案标记为正确以供将来参考。谢谢。
    • 哦!我忘了,我是新来的。
    【解决方案2】:

    需要额外的代码才能使其与 PHP 5.6 版本一起使用。

    $soapclient_options['stream_context'] = stream_context_create(
                array(
                    'ssl' => array(
                        'verify_peer' => false,
                        'verify_peer_name' => false,
                    )
                )
        );
    

    【讨论】:

    • 请不要那样做!这将使您的连接不那么安全,并且容易受到中间人的攻击!它使您的客户接受任何证书,而不仅仅是您的!
    • 这是因为您的证书可能是自签名的,并且未由某些全球机构(Certificate Authority)验证正确的解决方案是拥有服务器证书并只信任一个证书。更多信息(示例用于 curl 但它也适用于所有流 - file_get_contents、soap 等):unitstep.net/blog/2009/05/05/…
    • 谢谢@Greg 我没有使用这个解决方案。我已经转移到不同的身份验证系统。
    猜你喜欢
    • 2016-06-20
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多