删除与 Azure Cache for Redis 配合使用的 TLS 1.0 和 1.1

为了满足全行业对专门使用传输层安全性 (TLS) 1.2 或更高版本的推动,Azure Cache for Redis 正朝着要求在 2024 年 11 月使用 TLS 1.2 的方向迈进。 TLS 版本 1.0 和 1.1 已知很容易遭到 BEAST 和 POODLE 之类的攻击,并且存在其他常见漏洞和披露 (CVE) 弱点。

TLS 版本 1.0 和 1.1 还不支持支付卡行业 (PCI) 符合性标准推荐的新式加密方法和密码套件。 此 TLS 安全性博客详细说明了其中一些漏洞。

重要

TLS 1.2 要求将于 2024 年 11 月 1 日强制执行。

在这项工作的推进中,你可以期待 Azure Cache for Redis 出现如下变化:

  • 阶段 1:Azure Cache for Redis 不再将 TLS 1.0/1.1 作为新缓存创建的 MinimumTLSVersion 设置选项提供。 目前,不会更新现有的缓存实例。 不能将现有缓存的 MinimumTLSVersion 设置为 1.0 或 1.1。
  • 第 2 阶段:从 2024 年 11 月 1 日起,Azure Cache for Redis 将停止支持 TLS 1.1 和 TLS 1.0。 在此更改之后,应用程序必须使用 TLS 1.2 或更高版本才能与缓存通信。 当我们将所有缓存的 MinimumTLSVerion 更新为 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。
2024 年 11 月 1 日 所有缓存实例的最低 TLS 版本已更新为 1.2。 这意味着此时 Azure Cache for Redis 实例拒绝使用 TLS 1.0 或 1.1 连接。

作为此更改的一部分,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 版本设置为“默认”,则最低 TLS 版本设置为 TLS 1.2。 TLS 1.2 是未选择显式值时分配给缓存实例的默认值。

将应用程序配置为使用 TLS 1.2 或更高版本

大多数应用程序使用 Redis 客户端库来处理与缓存的通信。 下面的内容说明了如何将一些常用的客户端库(采用各种编程语言和框架)配置为使用 TLS 1.2 或更高版本。

.NET

在 .NET Framework 4.5.2 或更低版本上,Redis .NET 客户端默认使用最低的 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。 升级 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 或 TLS 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。

其他信息