Configurare motore di database di SQL Server per la crittografia delle connessioni

È possibile crittografare tutte le connessioni in ingresso a SQL Server o abilitare la crittografia solo per un set specifico di client. Per entrambi gli scenari, è prima necessario configurare SQL Server per l'uso di un certificato che soddisfi i requisiti di certificato per SQL Server prima di eseguire passaggi aggiuntivi nel computer server o nei computer client per crittografare i dati.

Questo articolo descrive come configurare SQL Server per i certificati (passaggio 1) e modificare le impostazioni di crittografia dell'istanza di SQL Server (passaggio 2). Entrambi i passaggi sono necessari per crittografare tutte le connessioni in ingresso a SQL Server quando si usa un certificato da un'autorità commerciale pubblica. Per ulteriori scenari, vedere Casi speciali di connessioni con crittografia a SQL Server.

Passaggio 1: Configurare SQL Server per l'uso dei certificati

Per configurare SQL Server per l'uso dei certificati descritti in Requisiti del certificato per SQL Server, seguire questa procedura:

  1. Installare il certificato nel computer che esegue SQL Server.
  2. Configurare SQL Server per l'uso del certificato installato.

A seconda della versione di Gestione configurazione SQL Server a cui si ha accesso nel computer SQL Server, usare una delle procedure seguenti per installare e configurare l'istanza di SQL Server.

Computer con Gestione configurazione SQL Server per SQL Server 2019 e versioni successive

A partire da SQL Server 2019 (15.x), la gestione dei certificati è integrata in Gestione configurazione SQL Server e può essere usata con versioni precedenti di SQL Server. Per aggiungere un certificato in un’istanza di SQL Server singola, in una configurazione del cluster di failover o in una configurazione del gruppo di disponibilità, vedere Gestione dei certificati (Gestione configurazione SQL Server). Configuration Manager semplifica notevolmente la gestione dei certificati installando il certificato e configurando SQL Server per l'uso del certificato installato con pochi passaggi.

I certificati per gli utenti vengono archiviati nel computer locale. Per installare un certificato che deve essere usato da SQL Server, è necessario eseguire Gestione configurazione SQL Server con un account che dispone di privilegi di amministratore locale.

È possibile installare temporaneamente un'edizione Express di SQL Server 2019 (15.x) o una versione successiva per usare Gestione configurazione SQL Server, che supporta la gestione integrata dei certificati.

Computer con Gestione configurazione SQL Server per SQL Server 2017 e versioni precedenti

Se si usa SQL Server 2017 (14.x) o una versione precedente e Gestione configurazione SQL Server per SQL Server 2019 (15.x) non è disponibile, seguire questa procedura per installare e configurare il certificato nel computer SQL Server:

  1. Nel menu Start selezionare Esegui, digitare MMC nella casella Apri e selezionare OK.
  2. Nella console MMC selezionare Aggiungi/Rimuovi snap-in nel menu File.
  3. Nella finestra Aggiungi o rimuovi snap-in, selezionare Certificati, quindi Aggiungi.
  4. Nella finestra di dialogo Snap-in certificati, selezionare Account computer e quindi Successivo>Fine.
  5. Nella finestra di dialogo Aggiungi o rimuovi snap-in, seleziona OK.
  6. Nella console MMC, espandere Certificati (computer locale)>Personale, fare clic con il pulsante destro del mouse su Certificati, scegliere Tutte le attività e selezionare Importa.
  7. Completare la procedura di importazione guidata per aggiungere un certificato al computer.
  8. Nella console MMC, fare clic con il pulsante destro del mouse sul certificato importato, scegliere Tutte le attività e selezionare Gestisci chiavi private. Nella finestra di dialogo Sicurezza aggiungere l'autorizzazione di lettura per un account utente usato dall'account del servizio SQL Server.
  9. In Gestione configurazione SQL Server espandere Configurazione di rete SQL Server, fare clic con il pulsante destro del mouse su Protocolli per <istanza del server> e selezionare Proprietà.
  10. Nella scheda Certificato della finestra di dialogo Protocolli per <nome istanza> Proprietà selezionare il certificato desiderato nell'elenco a discesa per la casella Certificato e quindi OK.
  11. Se è necessario crittografare tutte le connessioni a SQL Server, vedere Passaggio 2: Configurare le impostazioni di crittografia in SQL Server. Se si vuole abilitare solo la crittografia per client specifici, riavviare il servizio SQL Server e vedere Casi speciali per crittografare le connessioni a SQL Server.

Nota

Per installare i certificati nella configurazione del gruppo di disponibilità AlwaysOn, ripetere la procedura precedente in ogni nodo del gruppo di disponibilità.

Importante

L'account del servizio SQL Server deve avere le autorizzazioni di lettura per il certificato usato per forzare la crittografia nell’istanza SQL Server. Per un account del servizio senza privilegi, è necessario aggiungere le autorizzazioni di lettura al certificato. In caso contrario, il riavvio del servizio SQL Server potrebbe non riuscire.

Procedura aggiuntiva per le istanze del cluster di failover

Il certificato usato da SQL Server per crittografare le connessioni viene specificato nella chiave del Registro di sistema seguente:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\SuperSocketNetLib\Certificate

Questa chiave contiene una proprietà del certificato nota come identificazione personale, che identifica ogni certificato nel server. In un ambiente cluster questa chiave è impostata su Null anche se il certificato corretto esiste nell'archivio. Per risolvere questo problema, è necessario eseguire questi passaggi aggiuntivi in ognuno dei nodi del cluster dopo aver installato il certificato in ogni nodo:

  1. Passare all'archivio certificati in cui è archiviato il certificato FQDN. Nella pagina delle proprietà del certificato passare alla scheda Dettagli e copiare il valore di identificazione personale del certificato in una finestra Blocco note.

  2. Rimuovere gli spazi tra i caratteri esadecimali nel valore di identificazione personale in Blocco note.

  3. Avviare l'editordel Registro di sistema, passare alla chiave del Registro di sistema seguente e incollare il valore del passaggio 2:

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate

  4. Se il server virtuale SQL è attualmente in questo nodo, eseguire il failover in un altro nodo del cluster e riavviare il nodo in cui si è verificata la modifica del Registro di sistema.

  5. Ripetere questa procedura in tutti i nodi.

Avviso

È possibile che eventuali modifiche non corrette del Registro di sistema danneggino gravemente il sistema. Prima di modificare il Registro di sistema, è consigliabile eseguire il backup di tutti i dati importanti disponibili nel computer.

Nota

SQL Server 2008 R2 (10.50.x) e SQL Server 2008 R2 (10.50.x) Native Client (SNAC) supportano i certificati con caratteri jolly. SNAC è stato deprecato e sostituito con Microsoft OLE DB Driver per SQL Server e Microsoft ODBC Driver for SQL Server. È possibile che altri client non supportino i certificati con caratteri jolly.

Non è possibile selezionare il certificato con caratteri jolly usando Gestione configurazione SQL Server. Per usare un certificato con caratteri jolly, è necessario modificare la chiave del Registro di sistema HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib e immettere l'identificazione personale del certificato, senza spazi, nel valore Certificato.

Nota

Per utilizzare la crittografia in un cluster di failover, è necessario installare il certificato server con il nome DNS completo del server virtuale in tutti i nodi del cluster di failover. È possibile impostare il valore dell'opzione ForceEncryption nella casella della proprietà Protocolli per virtsql di Configurazione di rete SQL Server su .

Se si creano connessioni crittografate per un indicizzatore di ricerca di Azure a SQL Server in una macchina virtuale di Azure, vedere Connessioni da un indicizzatore a un’istanza SQL Server in una VM Azure.

Passaggio 2: Configurare le impostazioni di crittografia in SQL Server

I passaggi seguenti sono necessari solo se si desidera forzare le comunicazioni crittografate per tutti i client:

  1. In Gestione configurazione SQL Server espandere Configurazione di rete SQL Server, fare clic con il pulsante destro del mouse su Protocolli per <istanza del server> e quindi selezionare Proprietà.
  2. Nella casella ForceEncryption della scheda Flag selezionare , quindi OK per chiudere la finestra di dialogo.
  3. Riavviare il servizio SQL Server.

Nota

Alcuni scenari di certificato possono richiedere l'implementazione di passaggi aggiuntivi nel computer client e nell'applicazione client per garantire connessioni crittografate tra il client e il server. Per ulteriori informazioni, vedere Casi speciali di connessioni con crittografia a SQL Server.

Ulteriori informazioni

Crittografia dei pacchetti di accesso e crittografia dei pacchetti di dati

A livello generale, esistono due tipi di pacchetti nel traffico di rete tra un'applicazione client di SQL Server e SQL Server: pacchetti di credenziali (pacchetti di accesso) e pacchetti di dati. Quando si configura la crittografia (lato server o lato client), entrambi i tipi di pacchetti vengono sempre crittografati. Tuttavia, anche quando non si configura la crittografia, le credenziali (nel pacchetto di accesso) trasmesse quando un'applicazione client si connette a SQL Server vengono sempre crittografate. SQL Server usa un certificato che soddisfa i requisiti del certificato di un'autorità di certificazione attendibile, se disponibile. Questo certificato viene configurato manualmente dall'amministratore di sistema, usando una delle procedure descritte in precedenza nell'articolo o presente nell'archivio certificati nel computer SQL Server.

Certificati autofirmati generati da SQL Server

SQL Server userà un certificato di un'autorità di certificazione attendibile, se disponibile per crittografare i pacchetti di accesso. Se non è installato un certificato attendibile, SQL Server genera un certificato autofirmato (certificato di fallback) durante l'avvio e usa tale certificato autofirmato per crittografare le credenziali. Questo certificato autofirmato consente di aumentare la sicurezza, ma non protegge dallo spoofing delle identità dal server. Se viene usato il certificato autofirmato e il valore dell'opzione ForceEncryption è impostato su , tutti i dati trasmessi in una rete tra SQL Server e l'applicazione client vengono crittografati usando il certificato autofirmato.

Quando si usa un certificato autofirmato, SQL Server registra il messaggio seguente nel log degli errori:

È stato caricato un certificato a generazione automatica per la crittografia.

SQL Server 2016 (13.x) e versioni precedenti usano l'algoritmo SHA1. Tuttavia, l'algoritmo SHA1 e molti algoritmi meno recenti sono stati deprecati a partire da SQL Server 2016 (13.x). Per ulteriori informazioni, vedere Funzionalità del motore di database deprecate in SQL Server 2016.

In questi ambienti, se si usa il certificato autofirmato generato automaticamente da SQL Server, solo per l'handshake prelogin o per la crittografia di tutte le comunicazioni client server, il software di rilevamento delle vulnerabilità o il software di sicurezza o i criteri aziendali possono contrassegnare l'uso come problema di sicurezza. Per questi scenari hai a disposizione le seguenti opzioni:

  • Creare un nuovo certificato autofirmato o un certificato di terze parti che usa algoritmi di crittografia più avanzati e configurare SQL Server per l'uso di questo nuovo certificato.
  • Poiché ora comprendi il motivo del flag, è possibile ignorare il messaggio (non consigliato).
  • Eseguire l'aggiornamento a SQL Server 2017 (14.x) o a una versione successiva che usa un algoritmo hash più avanzato (SHA256) per i certificati autofirmati.

Script di PowerShell per creare un certificato autofirmato per SQL Server

Il frammento di codice seguente può essere usato per creare un certificato autofirmato in un computer che esegue SQL Server. Il certificato soddisfa i requisiti per la crittografia per un'istanza autonoma di SQL Server e viene salvato nell'archivio certificati del computer locale (PowerShell deve essere avviato come amministratore):

New-SelfSignedCertificate -Type SSLServerAuthentication -Subject "CN=$env:COMPUTERNAME" `
-DnsName ("{0}" -f [System.Net.Dns]::GetHostByName($env:computerName).HostName),'localhost' `
-KeyAlgorithm "RSA" -KeyLength 2048 -HashAlgorithm "SHA256" -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.1" `
-NotAfter (Get-Date).AddMonths(36) -KeySpec KeyExchange -Provider "Microsoft RSA SChannel Cryptographic Provider" `
-CertStoreLocation "cert:\LocalMachine\My"

Verificare la crittografia di rete

Per verificare che la crittografia di rete sia configurata e abilitata correttamente, eseguire la query Transact-SQL seguente:

USE [master]
GO
SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections;
GO

La colonna encrypt_option è un valore booleano che indica se la crittografia è abilitata per questa connessione. Se il valore è TRUE, la connessione viene crittografata in modo sicuro. Se il valore è FALSE, la connessione non viene crittografata.

Comportamento del certificato di SQL Server con autorizzazioni

Il servizio SQL Server rileva e usa automaticamente il certificato per la crittografia se sono soddisfatte tutte le condizioni seguenti:

  • Il certificato ha un oggetto che contiene il nome di dominio completo del computer
  • Il certificato è installato nell'archivio certificati del computer locale
  • All'account del servizio SQL Server viene concesso l'accesso alla chiave privata del certificato

Questo uso si verifica anche se il certificato non è selezionato in Gestione configurazione SQL Server.

Per eseguire l'override di questo comportamento, eseguire una delle operazioni seguenti:

  • Configurare un altro certificato da usare nella Gestione configurazione SQL Server

    or

  • Rimuovere le autorizzazioni dell'account del servizio SQL Server per il certificato indesiderato