Удаление поддержки TLS 1.0 и 1.1 при работе с Кэшем Azure для Redis
Чтобы удовлетворить толчок всей отрасли к эксклюзивному использованию tls версии 1.2 или более поздней, Кэш Azure для Redis движется к использованию TLS 1.2 в марте 2025 года. Известно, что протоколы TLS версий 1.0 и 1.1 подвержены атакам, таким как BEAST и POODLE, и имеют другие общеизвестные уязвимости (CVE).
Tls версии 1.0 и 1.1 также не поддерживают современные методы шифрования и наборы шифров, рекомендуемые стандартами соответствия платной картой (PCI). В блоге по безопасности TLS подробно рассматриваются некоторые из этих уязвимостей.
Внимание
Начиная с 1 марта 2025 г. использование TLS 1.2 станет обязательным.
Внимание
Содержимое tls 1.0/1.1 в этой статье не применяется к Кэш Azure для Redis Enterprise/Enterprise Flash, так как уровни enterprise поддерживают только TLS 1.2 или более поздней версии.
В рамках этих усилий можно ожидать, что следующие изменения Кэш Azure для Redis:
- Этап 1. Кэш Azure для Redis останавливает предложение TLS 1.0/1.1 в качестве параметра MinimumTLSVersion для создания нового кэша. На этом этапе существующие экземпляры кэша затронуты не будут. Для существующего кэша не удается задать значение MinimumTLSVersion 1.0 или 1.1.
- Этап 2. Кэш Azure для Redis останавливает поддержку TLS 1.1 и TLS 1.0 с 1 марта 2025 г. После этого изменения приложение для взаимодействия с кэшем должно будет использовать TLS 1.2 или более поздней версии. Служба Кэш Azure для Redis остается доступной при обновлении MinimumTLSVersion для всех кэшей до 1.2.
Дата | Description |
---|---|
Сентябрь 2023 | Объявление о выходе tls 1.0/1.1 |
1 марта 2024 г. | Начиная с 1 марта 2024 г., невозможно создать новые кэши с минимальной версией TLS, установленной для версии 1.0 или 1.1, и невозможно задать значение MinimumTLSVersion 1.0 или 1.1 для существующего кэша. Минимальная версия TLS не обновляется автоматически для существующих кэшей на этом этапе. |
31 октября 2024 г. | Убедитесь, что все приложения подключаются к Кэш Azure для Redis с помощью TLS 1.2 и минимальной версии TLS в параметрах кэша имеет значение 1.2. |
Начиная с 1 марта 2025 г. | Минимальная версия TLS для всех экземпляров кэша обновляется до версии 1.2. Это означает, что Кэш Azure для Redis экземпляры отклоняют подключения с помощью TLS 1.0 или 1.1 на этом этапе. |
Внимание
Содержимое этой статьи не относится к Кэш Azure для Redis Enterprise/Enterprise Flash, так как уровни Enterprise поддерживают только TLS 1.2.
В рамках этого изменения Кэш Azure для Redis удаляет поддержку старых наборов шифров, которые не защищены. Поддерживаемые наборы шифров ограничены следующими наборами, если кэш настроен как минимум с TLS 1.2:
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
В следующих разделах содержатся рекомендации по обнаружению зависимостей от этих предыдущих версий TLS и их удалении из приложения.
Проверка версий TLS, поддерживаемых Кэш Azure для Redis
Этот скрипт PowerShell можно использовать для проверки версий TLS, поддерживаемых конечной точкой Кэш Azure для Redis. Если экземпляр Redis является внедренной виртуальной сетью, необходимо запустить этот сценарий из виртуальной машины в виртуальной сети с доступом к конечной точке Кэш Azure для Redis.
Если результат отображается Tls Enabled
и(или) Tls 11 Enabled
убедитесь, что вы следуйте инструкциям по настройке Кэш Azure для Redis для использования TLS 1.2. Если результат отображается только 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 $_"
}
}
}
Настройка Кэша Azure для Redis для использования TLS 1.2
Вы можете настроить TLS 1.2 в кэше, установив для параметра Минимальная версия TLS в дополнительных параметрах кэша на портале Azure значение 1.2.
Чтобы настроить кэш для использования TLS 1.2, сначала выберите дополнительные параметры в меню ресурсов кэша.
Выберите 1.2 в поле Минимальная версия TLS в рабочей области. Затем нажмите кнопку Сохранить.
Это также можно сделать с помощью PowerShell. На момент выполнения команды у вас должен быть установлен модуль Az.RedisCache.
Set-AzRedisCache -Name <YourRedisCacheName> -MinimumTlsVersion "1.2"
Команда --minimum-tls-version
для задания версии TLS через командную строку доступна только при создании экземпляра Redis; изменение значения параметра minimum-tls-version
в существующем экземпляре Redis не поддерживается.
Примечание.
Служба Кэш Azure для Redis должна быть доступна во время миграции TLS 1.2 или более поздней версии.
Проверьте, соответствует ли клиентское приложение
Вы можете узнать, работает ли приложение с TLS 1.2, задав минимальное значение версии TLS значение TLS 1.2, как описано ранее, в тестовом или промежуточном кэше, а затем выполняя тесты. Если после этого изменения приложение продолжит работать должным образом, оно, вероятно, соответствует требованиям. Возможно, вам может потребоваться настроить клиентскую библиотеку Redis, используемую приложением, чтобы специально включить подключение TLS 1.2 к Кэш Azure для Redis.
Настройка клиентского приложения для использования 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 версии 5.6 как минимум.
.NET Core
Клиенты Redis .NET Core по умолчанию используют версию протокола TLS, установленную по умолчанию в ОС, которая зависит от самой ОС.
Действующая версия TLS по умолчанию может быть разной в зависимости от версии ОС и примененных исправлений. Дополнительные сведения см. в статье Рекомендации по использованию протокола TLS с .NET.
Тем не менее, если вы используете прежнюю версию ОС или просто хотите быть уверенными, рекомендуется вручную настроить предпочтительную версию TLS в клиенте.
Java
Клиенты Redis Java используют протокол TLS 1.0 в Java 6 и более ранних версиях. Jedis, Lettuce и Redisson не смогут подключиться к кэшу Azure для Redis, если в нем отключен TLS 1.0. Обновите платформу 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 не поддерживает TLS ни в какой версии PHP.
Python
Redis-py по умолчанию использует TLS 1.2.
GO
Redigo по умолчанию использует TLS 1.2.