我们在一个使用PHP5.5的旧代码库上有一个网站(目前),我们使用SoapClient
的一个集成告诉我们,他们很快就会禁止使用TLS < 1.2。
目前,我们的连接非常简单:
$client = new SoapClient($soap_url);
我们必须做什么才能确保只发送TLS 1.2请求?我找到了this answer,但我不完全确定这是否仍然适用于我们的情况;另外,也不确定我们是否应该强制使用SOAP1.1?
我们这一端有哪些要求来确保我们发送TLS 1.2请求?
发布于 2019-06-11 05:33:27
然后,服务器将选择它和客户端都支持的版本。因此,假设您的客户端系统支持TLS1.2,那么您可能不需要执行任何操作。
在1.0.1中,OpenSSL增加了对TLS1.2的支持。如果你使用的是el6或更高版本,并且更新了你的包,你应该没问题。
# openssl version
> OpenSSL 1.0.2k-fips 26 Jan 2017
您可以使用此nmap命令检查服务器支持的协议/密码:
nmap --script ssl-enum-ciphers -p 443 stackoverflow.com
现在,如果您想在使用TLS1.1时测试失败,或者强制使用密码之类的东西,那么您将需要使用PHP的stream_context_create
。
使用下面的代码,您可以通过将crypto_method
设置为STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
来强制使用to 1.2。
<?php
$options = ['trace' => 1,
'soap_version' => SOAP_1_2,
'exceptions' => true,
'location' => 'https://stackoverflow.com/foo',
'uri' => "https://stackoverflow.com/bar",
'stream_context' => stream_context_create([
'ssl'=> [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT,
'ciphers' => 'SHA256'
]
])];
$client = new SoapClient(null, $options);
try {
$response = $client->getFoo();
} catch (\Exception $e){
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
throw $e;
}
//OR, an even easier test with out a Soap Client...
$opts = [
'ssl'=> [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT,
'ciphers' => 'SHA256',
'verify_peer' => false,
'verify_peer_name' => false
]
];
$context = stream_context_create($opts);
$fp = fopen('https://stackoverflow.com', 'r', false, $context);
错误可能是这样的:
fopen():无法启用加密
https://stackoverflow.com/questions/56406312
复制相似问题