【问题标题】:How to force TLS 1.2 with SoapClient?如何使用 SoapClient 强制 TLS 1.2?
【发布时间】:2018-12-10 17:18:02
【问题描述】:

我使用的 PSP 最近切换为仅支持 TLS 1.2(根据 PCI-DSS)。

在一个 php7 应用程序中,我可以连接到他们的 SOAP API。但是,自从他们升级后,我收到一个 SSL 错误,表明他们的服务器不支持我的 TLS 版本。我运行了一个wireshark,可以确认只有client hello,所以server hello,它在TLS 1.0上。

我正在使用以下代码:

$this->soapClient = new SoapClient('some/wsdl'), [
    'location' => 'https://endpoint.of.server',
    'soap_version' => SOAP_1_1,
    'stream_context' => stream_context_create([
        'ssl' => [
            'local_cert' =>  '/path/to/client.crt',
            'crypto_method' =>  STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
        ],
    ])
]);

但是,此代码仍然使用 TLS 1.0,而不是所需的 TLS 1.2。

版本

OpenSSL 1.1.0h 27 Mar 2018

PHP 7.1.6-1~ubuntu16.04.1+deb.sury.org+1 (cli) ( NTS ).

【问题讨论】:

  • 嗨乔治,你找到这个问题的答案了吗?我有类似的设置和同样的问题。谢谢!

标签: php soap soap-client tls1.2


【解决方案1】:

事实证明,上面的代码是 100% 正确的。

在我的例子中,错误出现在证书的某个地方。由于仍然未知的原因,我们自行生成的 SSL 客户端证书无法很好地应对 TLS 1.2。在我们生成新证书后,一切都像魔术一样运行。

我尝试过/验证过的事情

  • 确保您拥有受支持的 openssl 版本 (>= 1.0.1)
  • 考虑手动指定密码
  • 使用 Wireshark 调试连接以验证协议

另外,看看How to force a certain TLS version in a PHP stream context for the ssl:// transport?

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2018-03-08
    • 2015-12-11
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多