Crittografia e convalida dei certificati in Microsoft.Data.SqlClient

Scarica ADO.NET

SQL Server esegue sempre la crittografia dei pacchetti di rete associati all'accesso. Se non è stato eseguito il provisioning di nessun certificato nel server quando viene avviato, SQL Server genera un certificato autofirmato utilizzato per crittografare pacchetti di accesso.

A livello generale, la crittografia tra un client e un server garantisce che i dati siano leggibili solo dal client e dal server. Una parte importante del processo di crittografia è la convalida del certificato server. La convalida del certificato server consente al client di assicurarsi che il server sia quello che dice di essere. Il certificato viene convalidato per elementi come scadenza, catena di attendibilità e che il nome nel certificato corrisponde al nome del server a cui si connette il client. Per altre informazioni, vedere Transport Layer Security e certificati digitali.

È consigliabile effettuare il provisioning di un certificato verificabile in SQL Server per garantire una connettività sicura. Il protocollo TLS (Transport Security Layer) può essere reso sicuro solo con la convalida del certificato.

Le applicazioni possono inoltre richiedere l'attivazione della crittografia per tutto il traffico di rete mediante le Encrypt parole chiave della stringa di connessione o le proprietà di connessione. Per impostazione predefinita, la crittografia di tutto il traffico di rete per una connessione richiede che nel server sia stato effettuato il provisioning di un certificato. Se si imposta il client in modo che consideri attendibile il certificato nel server, l'ambiente può risultare vulnerabile agli attacchi man-in-the-middle. Se si distribuisce un certificato verificabile nel server, verificare che le impostazioni client Encrypt siano True e Trust Server Certificate le impostazioni siano False.

Per abilitare la crittografia da usare quando non è stato effettuato il provisioning di un certificato nel server, è possibile utilizzare le impostazioni Encrypt e Trust Server Certificate le impostazioni del client. In questo caso, la crittografia usa un certificato server autofirmato senza convalida da parte del client. Questa configurazione crittografa la connessione, ma non impedisce ai dispositivi tra il client e il server di intercettare la connessione e di effettuare il proxy della crittografia.

Modifiche al comportamento della crittografia e della convalida dei certificati

La versione 4.0 di Microsoft.Data.SqlClient introduce modifiche che causano un’interruzione nelle impostazioni della crittografia. Encrypt ora è impostato per impostazione predefinita su True.

La versione 2.0 di Microsoft.Data.SqlClient introduce modifiche di rilievo nel comportamento delle Trust Server Certificate impostazioni. In precedenza, se Encrypt era impostato su False, il certificato del server non sarebbe stato convalidato, indipendentemente dalle Trust Server Certificate impostazioni. Ora, il certificato del server viene convalidato in base alle impostazioni Trust Server Certificate se il server forza la crittografia, anche se Encrypt è impostato su False.

Versione 4.0

La tabella seguente descrive il risultato della crittografia e della convalida per le impostazioni di crittografia e certificato:

Encrypt impostazioni del client Trust Server Certificate impostazioni del client Force encryption impostazioni del server Risultato
Falso False (impostazione predefinita) No La crittografia si verifica solo per i pacchetti LOGIN. Il certificato non viene convalidato.
Falso False (impostazione predefinita) (Modifica del comportamento dalla versione 1.0 alla 2.0)La crittografia di tutto il traffico di rete avviene solo se è disponibile un certificato server verificabile. In caso contrario, il tentativo di connessione non riesce.
Falso Vero La crittografia di tutto il traffico di rete si verifica e il certificato non viene convalidato.
Vero (nuovo valore predefinito) False (impostazione predefinita) N/D La crittografia di tutto il traffico di rete viene applicata solo se è disponibile un certificato server verificabile. In caso contrario, il tentativo di connessione non riesce.
Vero (nuovo valore predefinito) Vero N/D La crittografia di tutto il traffico di rete si verifica, ma il certificato non viene convalidato.
Strict (aggiunta nella versione 5.0) N/D N/D Si verifica la crittografia di tutto il traffico di rete usando TDS 8, solo se è disponibile un certificato server verificabile. In caso contrario, il tentativo di connessione non riesce.

Attenzione

La tabella precedente è solo una guida al comportamento del sistema con configurazioni diverse. Per una connettività sicura, verificare che sia il client sia il server richiedano la crittografia. Assicurarsi anche che il server abbia un certificato verificabile e che le impostazioni di TrustServerCertificatesul client siano impostate suFalse.

A partire dalla versione 5.0 di Microsoft.Data.SqlClient, HostNameInCertificate è una nuova opzione di connessione. Quando il driver convalida i certificati del server, garantisce che il nome comune (Common Name, CN) o il nome alternativo soggetto (Subject Alternate Name, SAN) nel certificato corrisponda al nome del server a cui si è connessi. In alcuni casi, ad esempio gli alias DNS, il nome del server potrebbe non corrispondere al CN o al SAN. Il valore HostNameInCertificate può essere usato per specificare un CN o un SAN diverso nel certificato del server.

Versione: 2.0

A partire dalla versione 2.0, quando il server forza la crittografia, il client convalida il certificato del server in base alle impostazioni di Trust Server Certificate, indipendentemente dalle impostazioni di Encrypt.

La tabella seguente descrive il risultato della crittografia e della convalida per le impostazioni di crittografia e certificato:

Encrypt impostazioni del client Trust Server Certificate impostazioni del client Force encryption impostazioni del server Risultato
False (impostazione predefinita) False (impostazione predefinita) No La crittografia si verifica solo per i pacchetti LOGIN. Il certificato non viene convalidato.
False (impostazione predefinita) False (impostazione predefinita) (Modifica del comportamento) La crittografia di tutto il traffico di rete avviene solo se è disponibile un certificato server verificabile. In caso contrario, il tentativo di connessione non riesce.
False (impostazione predefinita) Vero La crittografia di tutto il traffico di rete si verifica e il certificato non viene convalidato.
Vero False (impostazione predefinita) N/D La crittografia di tutto il traffico di rete viene applicata solo se è disponibile un certificato server verificabile. In caso contrario, il tentativo di connessione non riesce.
Vero Vero N/D La crittografia di tutto il traffico di rete si verifica, ma il certificato non viene convalidato.

Attenzione

La tabella precedente è solo una guida al comportamento del sistema con configurazioni diverse. Per una connettività sicura, verificare che sia il client sia il server richiedano la crittografia. Assicurarsi anche che il server abbia un certificato verificabile e che le impostazioni di TrustServerCertificatesul client siano impostate suFalse.

Version 1.0

La tabella seguente descrive il risultato della crittografia e della convalida per le impostazioni di crittografia e certificato:

Encrypt impostazioni del client Trust Server Certificate impostazioni del client Force encryption impostazioni del server Risultato
False (impostazione predefinita) False (impostazione predefinita) No La crittografia si verifica solo per i pacchetti LOGIN. Il certificato non viene convalidato.
False (impostazione predefinita) False (impostazione predefinita) La crittografia di tutto il traffico di rete si verifica, ma il certificato non viene convalidato.
False (impostazione predefinita) Vero La crittografia di tutto il traffico di rete si verifica e il certificato non viene convalidato.
Vero False (impostazione predefinita) N/D La crittografia di tutto il traffico di rete viene applicata solo se è disponibile un certificato server verificabile. In caso contrario, il tentativo di connessione non riesce.
Vero Vero N/D La crittografia di tutto il traffico di rete si verifica, ma il certificato non viene convalidato.

Vedi anche

Stringhe di connessione
Sintassi della stringa di connessione