Crittografia e convalida dei certificati in Microsoft.Data.SqlClient
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) | Sì | (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 | Sì | 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 TrustServerCertificate
sul 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) | Sì | (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 | Sì | 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 TrustServerCertificate
sul 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) | Sì | La crittografia di tutto il traffico di rete si verifica, ma il certificato non viene convalidato. |
False (impostazione predefinita) | Vero | Sì | 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