問題

我們使用PHP 5.5(現在)在舊程式碼庫上有一個網站,我們使用SoapClient介面的一個整合告訴我們他們將不久禁用TLS的使用.

目前我們的連線如下:

 $client = new SoapClient($soap_url);
 

我們必須做些什麼才能確保只發送TLS 1.2請求?我找到了這個答案,但我不完全確定這是否仍然適用於我們的情況;此外,不確定我們也應該強制Soap 1.1?

我們最終需要什麼來確保我們傳送TLS 1.2請求?

  最佳答案

在與伺服器談判連線時,假設openSSL,您的TLS庫將告訴伺服器您的最大支援版本是什麼.然後伺服器將選擇它的版本,並且客戶端兩者都支援.所以,假設您的客戶端系統支援 TLS1.2,您可能不需要任何操作.

TLS 1.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 的 stream_context_create

使用下面的程式碼,可以透過將 crypto_method 設定為強制使用 TLS1.2 STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT.或者,或許更有用的方法是,在強制使用STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT時,您可以測試失敗.

 <?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);

 

如果事情與1.2一起工作,並且您可以生成一個錯誤強制說1.1,那麼您可以非常自信的事情設定正常.錯誤將遵循以下行:

警告:fopen():SSL操作失敗,程式碼1. openssl錯誤 訊息:錯誤:140830B5:SSL例程:SSL3_client_hello:沒有密碼 可用

fopen():無法啟用crypto

當談到SOAP版本 1.1 vs 1.2 時,這些只是簡單物件訪問協議的不同W3C標準.更多的區別可以在這裡找到 .

最後我會說我沒有在PHP 5.5中測試過這個,這是一箇舊版本,這些天我沒有一個簡單的方法來將它旋轉.但是認為這一切仍然適用.

  相同標籤的其他問題

phpsoapsoap-clienttls1.2php-5.5