在與 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 and 1.1 版本也不支援支付卡產業 (PCI) 合規性標準所建議的新式加密方法和密碼套件。 這個 TLS 安全性部落格 \(英文\) 會更詳細地說明這其中一些弱點。
重要
從 2025 年 3 月 1 日起,將會強制執行 TLS 1.2 需求。
重要
本文中的 TLS 1.0/1.1 淘汰內容不適用於 Azure Cache for Redis Enterprise/Enterprise Flash,因為 Enterprise 層僅支援 TLS 1.2。
做為此工作的一部分,您可以預期 Azure Cache for Redis 會有下列變更:
- 階段 1:Azure Cache for Redis 會停止提供 TLS 1.0/1.1 作為新快取建立 MinimumTLSVersion 設定的選項。 此時將不會更新現有的快取執行個體。 您無法將現有快取的 MinimumTLSVersion 設定為 1.0 或 1.1。
- 階段 2:從 2025 年 3 月 1 日起,Azure Cache for Redis 會停止支援 TLS 1.1 和 TLS 1.0。 在此變更之後,您的應用程式就必須使用 TLS 1.2 或更新版本來與您的快取通訊。 當我們將所有快取的 MinimumTLSVersion 更新為 1.2 時,Azure Cache for Redis 服務仍可供使用。
Date | 描述 |
---|---|
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 的連線。 |
重要
本文中的內容不適用於 Azure Cache for Redis Enterprise/Enterprise Flash,因為 Enterprise 層僅支援 TLS 1.2。
在此變更過程中,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 版本的相依性,並將其從您的應用程式中移除的指導方針。
檢查您的應用程式是否已符合規範
您可以在測試或暫存快取上將 [最低 TLS 版本] 值設定為 TLS 1.2,然後執行測試,以確認您的應用程式是否使用 TLS 1.2。 最低 TLS 版本設定位於 Azure 入口網站中快取執行個體的 [進階設定] 中。 如果應用程式在這項變更之後繼續如預期般運作,則您的應用程式會使用 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=true
和sslProtocols=tls12
。 - ServiceStack.Redis:遵循 ServiceStack.Redis 指示,且至少需要 ServiceStack.Redis v5.6。
.NET Core
Redis .NET Core 用戶端會預設為 OS 預設的 TLS 版本,使用的版本取決於 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。 升級您的 Java 架構以使用新的 TLS 版本。
針對 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。