次の方法で共有


Azure Cache for Redis での使用から TLS 1.0 と 1.1 を削除する

トランスポート層セキュリティ (TLS) バージョン 1.2 以降の排他的使用に向けた業界全体の推進活動に対応するために、Azure Cache for Redis は、2025 年 3 月に TLS 1.2 の使用を求める方向に進んでいます。 TLS バージョン 1.0 と 1.1 は、BEAST や POODLE などの攻撃を受けやすく、またその他の共通脆弱性識別子 (CVE) の弱点を持つことが知られています。

また、TLS バージョン 1.0 および 1.1 では、ペイメント カード業界 (PCI) コンプライアンスの標準で推奨されている最新の暗号化方式と暗号スイートはサポートされていません。 こちらの TLS セキュリティ ブログでは、これらの脆弱性の一部について詳しく説明しています。

重要

2025 年 3 月 1 日以降、TLS 1.2 要件が適用されます。

重要

この記事に記載されている TLS 1.0/1.1 の廃止に関する内容は、Enterprise レベルでは TLS 1.2 以降のみがサポートされるため、Azure Cache for Redis Enterprise/Enterprise Flash には適用されません。

この作業の一環として、Azure Cache for Redis に対して次の変更が予想されます。

  • フェーズ 1: Azure Cache for Redis では、新しいキャッシュ作成の MinimumTLSVersion 設定のオプションとしての TLS 1.0/1.1 の提供が停止されます。 この時点で既定のキャッシュ インスタンスが更新されることはありません。 既存のキャッシュに対して、MinimumTLSVersion を 1.0 または 1.1 に設定することはできません。
  • "フェーズ 2": Azure Cache for Redis では、2025 年 3 月 1 日から TLS 1.1 と TLS 1.0 のサポートが停止されます。 この変更以降、お使いのアプリケーションでは、TLS 1.2 以降を使用してキャッシュと通信する必要があります。 すべてのキャッシュの MinimumTLSVersion を 1.2 に更新している間、Azure Cache for Redis サービスを利用できます。
日付 説明
2023 年 9 月 TLS 1.0/1.1 の廃止のお知らせ
2024 年 3 月 1 日 2024 年 3 月 1 日以降、最小 TLS バージョンが 1.0 または 1.1 に設定された新しいキャッシュを作成できません。また既存のキャッシュに対して MinimumTLSVersion を 1.0 または 1.1 に設定できません。 現時点では、既存のキャッシュの最小 TLS バージョンは自動的に更新されません。
2024 年 10 月 31 日 確実に TLS 1.2 を使用して Azure Cache for Redis にすべてのアプリケーションが接続され、キャッシュ設定の最小 TLS バージョンが 1.2 に設定されるようにします。
2025 年 3 月 1 日以降 すべてのキャッシュ インスタンスの最小 TLS バージョンが 1.2 に更新されます。 これは、Azure Cache for Redis インスタンスで TLS 1.0 または 1.1 を使用する接続が現時点では拒否されることを意味します。

重要

この記事の内容は、Enterprise レベルでは TLS 1.2 のみがサポートされるため、Azure Cache for Redis Enterprise/Enterprise Flash には適用されません。

この変更の一環として、Azure Cache for Redis では、安全でない古い暗号スイートのサポートが廃止されます。 キャッシュが最小の TLS 1.2 で構成されている場合、サポートされる暗号スイートは以下のスイートに制限されます。

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256

以下のセクションでは、これらの以前の TLS バージョンへの依存関係を検出し、アプリケーションから削除する方法に関する一般的なガイダンスを提供します。

Azure Cache for Redis でサポートされている TLS バージョンを確認する

この PowerShell スクリプトを使用して、Azure Cache for Redis エンドポイントでサポートされている TLS バージョンを確認できます。 Redis インスタンスが仮想ネットワーク (VNet) に挿入されている場合は、Azure Cache for Redis エンドポイントにアクセスできる VNet 内の仮想マシンからこのスクリプトを実行する必要があります。

結果に Tls EnabledTls 11 Enabled が表示される場合は、「TLS 1.2 を使用するように Azure Cache for Redis を構成する」の手順に従ってください。 結果に Tls12 Enabled のみが表示され、クライアント アプリケーションがエラーなしで接続できる場合は、アクションは必要ありません。

    param(
    [Parameter(Mandatory=$true)]
    [string]$redisCacheName,
    [Parameter(Mandatory=$false)]
    [string]$dnsSuffix = ".redis.cache.windows.net",
    [Parameter(Mandatory=$false)]
    [int]$connectionPort = 6380,
    [Parameter(Mandatory=$false)]
    [int]$timeoutMS = 2000
    )
    $redisEndpoint = "$redisCacheName$dnsSuffix"
    $protocols = @(
        [System.Security.Authentication.SslProtocols]::Tls,
        [System.Security.Authentication.SslProtocols]::Tls11,
        [System.Security.Authentication.SslProtocols]::Tls12
    )
    $protocols | % {
        $ver = $_
        $tcpClientSocket = New-Object Net.Sockets.TcpClient($redisEndpoint, $connectionPort )
        if(!$tcpClientSocket)
        {
            Write-Error "$ver- Error Opening Connection: $port on $computername Unreachable"
            exit 1;
        }
        else
        {
            $tcpstream = $tcpClientSocket.GetStream()
            $sslStream = New-Object System.Net.Security.SslStream($tcpstream,$false)
            $sslStream.ReadTimeout = $timeoutMS
            $sslStream.WriteTimeout = $timeoutMS
            try
            {
                $sslStream.AuthenticateAsClient($redisEndpoint, $null, $ver, $false)
                Write-Host "$ver Enabled"
            }
            catch [System.IO.IOException]
            {
                $null = $_
                #Write-Host "$ver Disabled"
            }
            catch
            {
                $null = $_
                #Write-Error "Unexpected exception $_"
            }
        }
    }

TLS 1.2 を使用するように Azure Cache for Redis を構成する

Azure portal で、キャッシュの [詳細設定][最小 TLS バージョン] の値を TLS 1.2 に設定することで、キャッシュに対して TLS 1.2 を構成できます。

  1. TLS 1.2 を使用するようにキャッシュを構成するには、まずキャッシュの [リソース] メニューから [詳細設定] を選択します。

  2. 作業ウィンドウの [最小 TLS バージョン][1.2] を選択します。 次に、 [保存] を選択します。

Azure portal でキャッシュに関する TLS 1.2 を設定する方法を示すスクリーンショット

PowerShell でも同じように設定できます。 コマンドを実行する前に、Az.RedisCache モジュールが既にインストールされている必要があります。

   Set-AzRedisCache -Name <YourRedisCacheName> -MinimumTlsVersion "1.2"

CLI を使用して TLS バージョンを設定する場合、--minimum-tls-version は Redis の作成時にのみ使用でき、既存の Redis インスタンスでの minimum-tls-version の変更はサポートされていません。

Note

TLS 1.2 以降への移行では、Azure Cache for Redis サービスを使用できます。

クライアント アプリケーションが既に準拠しているかどうかを確認する

前の手順で説明したように、テストまたはステージング キャッシュで [TLS の最小バージョン] を 1.2 に設定し、テストを実行することで、アプリケーションが TLS 1.2 で機能するかどうかを確認できます。 この変更後もアプリケーションが予想どおりに動作し続ける場合は、おそらく準拠しています。 場合によっては、Azure Cache for Redis に接続するために、アプリケーションで使用する Redis クライアント ライブラリで、TLS 1.2 を有効にするよう構成する必要があります。

TLS 1.2 を使用するようにクライアント アプリケーションを構成する

ほとんどのアプリケーションは、Redis クライアント ライブラリを使用して、キャッシュとの通信を処理します。 ここでは、さまざまなプログラミング言語およびフレームワークで、いくつかの一般的なクライアント ライブラリを TLS 1.2 を使用するように構成する手順について説明します。

.NET

Redis .NET クライアントは、.NET Framework 4.5.2 以前では既定で以前の TLS バージョンを使用し、.NET Framework 4.6 以降では最新の TLS バージョンを使用します。 古いバージョンの .NET Framework を使用している場合は、TLS 1.2 を手動で有効にします。

  • StackExchange.Redis: 接続文字列に ssl=truesslProtocols=tls12 を設定します。
  • ServiceStack.Redis:ServiceStack.Redis の手順に従い、ServiceStack.Redis v5.6 以降が必要です。

.NET Core

既定では、Redis .NET Core クライアントで、OS 既定の TLS バージョンを使用します。これは OS ごとに異なります。

OS のバージョンと適用したパッチにより、既定で有効になる TLS のバージョンは異なります。 詳細については、「.NET Framework でのトランスポート層セキュリティ (TLS) のベスト プラクティス」を参照してください。

ただし、古い OS を使用している場合またはバージョンを確実に指定したい場合は、クライアントから、希望の TLS バージョンを手動で設定することをお勧めします。

Java

Redis Java クライアントは、Java バージョン 6 以前では TLS 1.0 を使用します。 TLS 1.0 がキャッシュで無効になっている場合、Jedis、Lettuce、Redisson は Azure Cache for Redis に接続できません。 新しい TLS バージョンを使用するように Java フレームワークをアップグレードします。

Java 7 の場合、Redis クライアントは既定では TLS 1.2 を使用しませんが、使用するように構成できます。 たとえば Jedis では、次のコード スニペットを使って、基になる TLS 設定を指定できます。

SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLParameters sslParameters = new SSLParameters();
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
sslParameters.setProtocols(new String[]{"TLSv1.2"});
 
URI uri = URI.create("rediss://host:port");
JedisShardInfo shardInfo = new JedisShardInfo(uri, sslSocketFactory, sslParameters, null);
 
shardInfo.setPassword("cachePassword");
 
Jedis jedis = new Jedis(shardInfo);

Lettuce と Redisson のクライアントには、TLS バージョンを指定する機能がまだありません。 キャッシュで TLS 1.2 接続のみが受け入れられる場合は、中断されます。 これらのクライアントの修正プログラムはレビュー中であるため、これらのパッケージによって、このサポートに更新されたバージョンがないかどうか確認してください。

Java 8 では、既定で TLS 1.2 が使用され、ほとんどの場合、クライアント構成に更新プログラムは必要ありません。 念のため、アプリケーションをテストしてください。

Java 17 では、TLS 1.3 が既定で使われています。

Node.js

Node Redis と ioredis はどちらも TLS 1.2 と 1.3 をサポートしています。

PHP

PHP 7 より前のバージョン:Predis では TLS 1.0 のみがサポートされます。 これらのバージョンでは TLS 1.2 がサポートされていません。TLS 1.2 を使用するには、アップグレードする必要があります。

Php 7.0 から PHP 7.2.1:Predis は、規定では TLS 1.0 または1.1 のみを使用します。 TLS 1.2 を使用するには、次の回避策を使用できます。 クライアント インスタンスを作成するときに、TLS 1.2 を指定します。

$redis=newPredis\Client([
    'scheme'=>'tls',
    'host'=>'host',
    'port'=>6380,
    'password'=>'password',
    'ssl'=>[
        'crypto_type'=>STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
    ],
]);

PHP 7.3 および以降のバージョン:Predis は最新の TLS バージョンを使用します。

PhpRedis

PhpRedis は、どの PHP バージョンでも TLS をサポートしていません。

Python

Redis-py は、既定で TLS 1.2 を使用します。

GO

Redigo は、既定で TLS 1.2 を使用します。