Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确保SoapClient在PHP5.5中发送TLS1.2请求_Php_Soap_Soap Client_Tls1.2_Php 5.5 - Fatal编程技术网

确保SoapClient在PHP5.5中发送TLS1.2请求

确保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

我们在一个使用PHP5.5的旧代码库上有一个站点(目前),我们使用
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服务器正在连接。不想把事情搞混/