使用TLS 1.2进行PHP SOAP通信

5
我们已经在我们的网站中集成了UPS Web Service。最近,我们收到了来自UPS的警报:
从2016年1月26日起,UPS测试环境将需要TLS 1.2安全协议,并可用于系统测试。
从2016年5月31日起,UPS将在生产中要求TLS 1.2安全协议。在此日期之后,使用旧协议(TLS 1.1或更早版本)向UPS提交的任何通信请求均会失败。
我的问题是:
有没有办法使用TLS通信PHP SOAP?我已经搜索了很多,但还没有找到任何解决方案。
请提供建议。

请阅读此链接:https://bugs.php.net/bug.php?id=65329&edit=1。 - Jay Blanchard
2个回答

10

我也遇到了这个问题。以下是我使用的方法来强制进行TLS通信。

$mode = array(
    'soap_version' => 'SOAP_1_1',  // use soap 1.1 client
    'trace' => 1,
    'stream_context' => stream_context_create(
        array(
            'ssl' => array(
                'crypto_method' =>  STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
            )
        )
    )
);

// initialize soap client
$client = new SoapClient($this->wsdl, $mode);

我在使用包含未支持 TLS 1.2 的 OpenSSL 版本的 MAMP 开发环境时,总是遇到问题。


当我使用stream_context和不使用stream_context打印时, $client->__getLastRequestHeaders(); $client->__getLastResponseHeaders(); 两者都打印相同的结果。 - Minesh Patel
3
如何检查我们的请求是否使用了TSL1.2协议? - Minesh Patel

2
最后我找到了解决这个问题的办法。它需要 OpenSSL > 1.0.1 或者 NSS > 3.15,并且在我的情况下,我们服务器支持的 SSL 版本是 NSS/3.19.1 Basic ECC,因此无需更改任何代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接