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(Common Vulnerabilities and Exposures) 취약점이 있는 것으로 알려져 있습니다.
TLS 버전 1.0 및 1.1은 또한 PCI(Payment Card Industry) 규정 준수 표준에서 권장하는 최신 암호화 방법 및 암호화 그룹을 지원하지 않습니다. TLS 보안 블로그에는 이러한 취약점 중 일부가 자세히 설명되어 있습니다.
Important
2025년 3월 1일부터 TLS 1.2 요구 사항이 적용됩니다.
Important
이 문서의 TLS 1.0/1.1 사용 중지 콘텐츠는 엔터프라이즈 계층이 TLS 1.2 이상만 지원하므로 Azure Cache for Redis Enterprise/Enterprise Flash에는 적용되지 않습니다.
이러한 활동의 일환으로 Azure Cache for Redis가 다음과 같이 변경될 수 있습니다.
- 1단계: Azure Cache for Redis는 새 캐시 만들기에 대한 최소TLSVersion 설정 옵션으로 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을 사용하는 연결을 거부한다는 의미입니다. |
Important
엔터프라이즈 계층은 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의 Virtual Machine에서 이 스크립트를 실행해야 합니다.
결과가 표시되는 Tls Enabled
Tls 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를 구성할 수 있습니다.
TLS 1.2를 사용하도록 캐시를 구성하려면 먼저 캐시의 리소스 메뉴에서 고급 설정을 선택합니다.
작업 창의 최소 TLS 버전에서 1.2를 선택합니다. 그런 다음 저장을 선택합니다.
PowerShell을 사용하여 같은 작업을 할 수도 있습니다. 명령을 실행하기 전에 Az.RedisCache 모듈이 이미 설치되어 있어야 합니다.
Set-AzRedisCache -Name <YourRedisCacheName> -MinimumTlsVersion "1.2"
CLI를 통해 TLS 버전을 설정하는 경우 --minimum-tls-version
은 Redis 생성 시간에만 사용할 수 있으며 기존 Redis 인스턴스에서 minimum-tls-version
를 변경하는 것은 지원되지 않습니다.
참고 항목
마이그레이션 TLS 1.2 이상 중에 Azure Cache for Redis 서비스를 사용할 수 있어야 합니다.
클라이언트 애플리케이션이 이미 규정을 준수하는지 확인
앞에서 설명한 대로 테스트 또는 스테이징 캐시에서 최소 TLS 버전 값을 TLS 1.2로 설정한 다음 테스트를 실행하여 애플리케이션이 TLS 1.2에서 작동하는지 확인할 수 있습니다. 이 변경 후 애플리케이션이 예상대로 계속 작동하면 아마도 규격일 수 있습니다. 특히 TLS 1.2가 Azure Cache for Redis에 연결할 수 있도록 애플리케이션에서 사용하는 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 v5.6 이상이 필요합니다.
.NET Core
Redis .NET Core 클라이언트는 OS 자체에 따라 달라지는 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에 연결할 수 없습니다. 새 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를 사용합니다.
이동
Redigo는 기본적으로 TLS 1.2를 사용합니다.