我使用的PSP最近切换为仅支持TLS 1.2(根据PCI-DSS)。
在php7应用程序中,我可以连接到他们的SOAP API。但是,由于他们的升级,我收到一个SSL错误,表明他们的服务器不支持我的TLS版本。我运行了一个Wireshk,可以确认只有client hell
o,所以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 )
。
答案 0 :(得分:0)
事实证明,以上代码是100%正确的。
就我而言,错误位于证书中的某个位置。出于未知的原因,我们自己生成的SSL客户端证书无法很好地应对TLS 1.2。生成新证书后,一切都变得像魔术一样。
我尝试过/验证过的事情
openssl
版本(> = 1.0.1)另外,看看How to force a certain TLS version in a PHP stream context for the ssl:// transport?