Rimuovere TLS 1.0 and 1.1 per l'uso con cache di Azure per Redis
Per soddisfare il push a livello di settore verso l'uso esclusivo di Transport Layer Security (TLS) versione 1.2 o successiva, cache di Azure per Redis sta passando a richiedere l'uso di TLS 1.2 nel marzo 2025. Le versioni TLS 1.0 e 1.1 sono notoriamente esposte ad attacchi come BEAST e POODLE e presentano punti deboli relativi a vulnerabilità ed esposizioni comuni (CVE).
Le versioni 1.0 e 1.1 di TLS non supportano i metodi e i pacchetti di crittografia moderni consigliati dagli standard di conformità PCI (Payment Card Industry). Questo blog sulla sicurezza TLS illustra alcune di queste vulnerabilità in modo più dettagliato.
Importante
A partire dal 1° marzo 2025, verrà applicato il requisito TLS 1.2.
Importante
Il contenuto del ritiro di TLS 1.0/1.1 in questo articolo non si applica a cache di Azure per Redis Enterprise/Enterprise Flash perché i livelli Enterprise supportano solo TLS 1.2 o versione successiva.
Come parte di questo sforzo, è possibile prevedere le modifiche seguenti in Cache Redis di Azure:
- Fase 1: Cache Redis di Azure smette di offrire TLS 1.0/1.1 come opzione per l'impostazione MinimumTLSVersion per la creazione di nuove cache. A questo punto le istanze della cache esistenti non verranno aggiornate. Non è possibile impostare MinimumTLSVersion su 1.0 o 1.1 per la cache esistente.
- Fase 2: cache di Azure per Redis interrompe il supporto di TLS 1.1 e TLS 1.0 a partire dal 1° marzo 2025. Dopo questa modifica, l'applicazione deve usare TLS 1.2 o una versione successiva per comunicare con la cache. Il servizio cache di Azure per Redis rimane disponibile mentre si aggiorna MinimumTLSVersion per tutte le cache alla versione 1.2.
Data | Descrizione |
---|---|
Settembre 2023 | Annuncio sul ritiro di TLS 1.0/1.1 |
1° marzo 2024 | A partire dal 1° marzo 2024, non è possibile creare nuove cache con la versione minima di TLS impostata su 1.0 o 1.1 e non è possibile impostare MinimumTLSVersion su 1.0 o 1.1 per la cache esistente. La versione minima di TLS non viene aggiornata automaticamente per le cache esistenti a questo punto. |
31 ottobre 2024 | Assicurarsi che tutte le applicazioni si connettano a Cache Redis di Azure usando TLS 1.2 e la versione minima di TLS nelle impostazioni della cache sia impostata su 1.2. |
A partire dal 1° marzo 2025 | La versione minima di TLS per tutte le istanze della cache viene aggiornata alla versione 1.2. Ciò significa che le istanze di Cache Redis di Azure rifiutano le connessioni usando TLS 1.0 o 1.1 a questo punto. |
Importante
Il contenuto di questo articolo non si applica a Cache di Azure per Redis Enterprise/Enterprise Flash perché i livelli Enterprise supportano solo TLS 1.2.
Come parte di questa modifica, Cache Redis di Azure rimuove il supporto per le suite di crittografia meno recenti che non sono sicure. I pacchetti di crittografia supportati sono limitati alle suite seguenti quando la cache è configurata con almeno TLS 1.2:
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
Le azioni seguenti offrono indicazioni generali su come rilevare le dipendenze da queste versioni precedenti di TLS e rimuoverle dall'applicazione.
Controllare le versioni di TLS supportate dal cache di Azure per Redis
È possibile usare questo script di PowerShell per verificare le versioni TLS supportate dall'endpoint cache di Azure per Redis. Se l'istanza di Redis è inserita nella rete virtuale, è necessario eseguire questo script da una macchina virtuale nella rete virtuale che ha accesso all'endpoint cache di Azure per Redis.
Se il risultato mostra Tls Enabled
e/o Tls 11 Enabled
, assicurarsi di seguire le istruzioni per configurare il cache di Azure per Redis per l'uso di TLS 1.2. Se il risultato viene visualizzato solo Tls12 Enabled
e l'applicazione client è in grado di connettersi senza errori, non è necessaria alcuna azione.
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 $_"
}
}
}
Configurare la cache di Azure per Redis per l'uso di TLS 1.2
È possibile configurare TLS 1.2 nella cache impostando il valore versione TLS minima su TLS 1.2 nelle impostazioni avanzate della cache nel portale di Azure.
Per configurare la cache per l'uso di TLS 1.2, selezionare innanzitutto Impostazioni avanzate dal menu Risorsa della cache.
Selezionare 1.2 nella versione TLS minima nel riquadro di lavoro. Selezionare quindi Salva.
Questa operazione può anche essere eseguita tramite PowerShell. È necessario che il modulo Az.RedisCache sia già installato prima di eseguire il comando.
Set-AzRedisCache -Name <YourRedisCacheName> -MinimumTlsVersion "1.2"
Per impostare la versione TLS tramite l'interfaccia della riga di comando, --minimum-tls-version
è disponibile solo in fase di creazione di Redis e la modifica di minimum-tls-version
in un'istanza di Redis esistente non è supportata.
Nota
Il servizio cache di Azure per Redis deve essere disponibile durante la migrazione TLS 1.2 o versione successiva.
Verificare se l'applicazione client è già conforme
È possibile scoprire se l'applicazione funziona con TLS 1.2 impostando il valore versione minima di TLS su TLS 1.2 come illustrato in precedenza, in una cache di test o staging e quindi eseguendo i test. Se l'applicazione continua a funzionare come previsto dopo questa modifica, è probabile che sia conforme. È possibile che sia necessario configurare la libreria client Redis usata dall'applicazione per consentire in modo specifico a TLS 1.2 di connettersi a cache di Azure per Redis.
Configurare l'applicazione client per l'uso di TLS 1.2
La maggior parte delle applicazioni usa le librerie client Redis per gestire la comunicazione con le cache. Di seguito sono riportate le istruzioni per configurare alcune delle librerie client più diffuse, in diversi linguaggi di programmazione e framework, per l'uso di TLS 1.2.
.NET
Per impostazione predefinita, i client .NET Redis usano la versione più recente di TLS in .NET Framework 4.5.2 o versioni precedenti e la versione più recente di TLS in .NET Framework 4.6 o versioni successive. Se si usa una versione precedente di .NET Framework, abilitare TLS 1.2 manualmente:
- StackExchange.Redis: impostare
ssl=true
esslProtocols=tls12
nella stringa di connessione. - ServiceStack.Redis: seguire le istruzioni ServiceStack.Redis e richiedere almeno la versione 5.6 di ServiceStack.Redis.
.NET Core
Per impostazione predefinita, i client .NET Core Redis usano la versione di TLS predefinita del sistema operativo che dipende da quest'ultimo.
A seconda della versione del sistema operativo e delle patch applicate, la versione TLS predefinita effettiva può variare. Per altre informazioni, vedere Procedure consigliate per Transport Layer Security (TLS) con .NET Framework.
Tuttavia, se si usa un sistema operativo precedente o si vuole essere sicuri, è consigliabile configurare manualmente la versione di TLS preferita tramite il client.
Java
I client Java per Redis usano TLS 1.0 nella versione 6 di Java o precedente. Jedis, Lettuce e Redisson non possono connettersi alla cache di Azure per Redis se TLS 1.0 è disabilitato nella cache. Aggiornare il framework Java per usare le nuove versioni di TLS.
In Java 7, i client Redis non usano TLS 1.2 per impostazione predefinita ma possono essere configurati appositamente. Ah esempio, Jedis consente di specificare le impostazioni TLS sottostanti con il frammento di codice seguente:
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);
I client Lettuce e Redisson non supportano ancora la specifica della versione TLS. Si interrompono se la cache accetta solo connessioni TLS 1.2. Le correzioni per questi client sono in fase di revisione, quindi si consiglia di verificare se esiste una versione aggiornata con questo supporto.
In Java 8, per impostazione predefinita viene usato TLS 1.2 e nella maggior parte dei casi non è necessario aggiornare la configurazione client. Per sicurezza, eseguire il test dell'applicazione.
A partire da Java 17, TLS 1.3 viene usato per impostazione predefinita.
Node.js
Node Redis e ioredis supportano sia TLS 1.2 che 1.3.
PHP
Versioni precedenti a PHP 7: Predis supporta solo TLS 1.0. Queste versioni non funzionano con TLS 1.2, quindi è necessario eseguire l'aggiornamento.
PHP da 7.0 a PHP 7.2.1: Predis usa solo TLS 1.0 o 1.1 per impostazione predefinita. Per usare TLS 1.2 è possibile sfruttare la soluzione alternativa seguente. Specificare TLS 1.2 quando si crea l'istanza del client:
$redis=newPredis\Client([
'scheme'=>'tls',
'host'=>'host',
'port'=>6380,
'password'=>'password',
'ssl'=>[
'crypto_type'=>STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
],
]);
PHP 7.3 e versioni successive: Predis usa la versione più recente di TLS.
PhpRedis
PhpRedis non supporta TLS su nessuna versione PHP.
Python
Redis-py usa TLS 1.2 per impostazione predefinita.
GO
Redigo usa TLS 1.2 per impostazione predefinita.