确保SoapClient在PHP5.5中发送TLS1.2请求
我们在一个使用PHP5.5的旧代码库上有一个站点(目前),我们使用确保SoapClient在PHP5.5中发送TLS1.2请求,php,soap,soap-client,tls1.2,php-5.5,Php,Soap,Soap Client,Tls1.2,Php 5.5,我们在一个使用PHP5.5的旧代码库上有一个站点(目前),我们使用SoapClient接口的一个集成告诉我们,他们很快将禁用TLS
SoapClient
接口的一个集成告诉我们,他们很快将禁用TLS<1.2的使用
目前,我们的连接非常简单:
$client = new SoapClient($soap_url);
我们必须做什么才能确保只发送TLS 1.2请求?我发现了,但我不完全确定这是否仍然适用于我们的情况;另外,我们也不确定是否应该强制使用SOAP1.1
为了确保发送TLS 1.2请求,我们的终端有哪些要求?在与服务器协商连接时,假设openSSL将告诉服务器您支持的最大版本。然后,服务器将选择它和客户端都支持的版本。因此,假设您的客户端系统支持TLS1.2,您可能不需要执行任何操作 TLS1.2支持在1.0.1中添加到OpenSSL。如果您使用的是el6或更新版本,并且更新了您的软件包,那么您应该不会有问题。检查您的版本,如下所示:
# openssl version
> OpenSSL 1.0.2k-fips 26 Jan 2017
您可以使用此nmap命令检查服务器支持哪些协议/密码:
nmap --script ssl-enum-ciphers -p 443 stackoverflow.com
现在,如果您想在使用TLS1.1时测试失败,或者强制使用密码或其他东西,则需要使用PHP的
使用下面的代码,您可以通过将crypto_方法
设置为
STREAM\u CRYPTO\u方法\u TLSv1\u 2\u客户端
。或者,也许对您的要求更有用,您可以在强制使用流加密方法\u TLSv1\u 1\u客户端
时测试失败
<?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);
我们在谈论什么操作系统?@ficuscr CentOS。非常感谢。我检查了OpenSSL版本,并于2017年1月26日获得了OpenSSL 1.0.2k-fips,所以听起来不错。然后我尝试了nmap命令,但出现了一个错误:nmap:command-notfound
。但从您的意思来看,如果服务器似乎支持TLS 1.2,那么我们就不需要通过使用stream\u context\u create
correct?correct强制它。像当前的web浏览器一样,最新的客户端应该可以正常工作。nmap可以由您的软件包管理器安装。因此,它不仅取决于我们的服务器,还取决于所使用的客户端浏览器,我们对此无能为力?我只是做了比较。连接到服务器并建立安全连接的web浏览器,就像您的服务器通过cURL与另一台服务器建立安全连接一样。只要你的服务器不等同于IE6,你就很可能没事。但是,您是正确的,例如,如果web服务器需要TLS 1.2,一些可能最终无法通过HTTPS进行连接。要清楚,使用服务器端http客户端(如cURL),最终用户的web浏览器不是一个因素。他们的浏览器没有连接,您的web服务器正在连接。不想把事情搞混/