Configurare SQL Server motore di database per la crittografia delle connessioni

È possibile crittografare tutte le connessioni in ingresso per SQL Server o abilitare la crittografia solo per un set specifico di client. Per uno di questi scenari, è prima necessario configurare SQL Server per usare 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 altri scenari, vedere Casi speciali per la crittografia delle connessioni 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, utilizzare una delle procedure seguenti per installare e configurare l'istanza di SQL Server.

Computer con SQL Server 2019 Configuration Manager

A partire da SQL Server 2019 (15.x), la gestione dei certificati è integrata in Gestione configurazione SQL Server e può essere usata con le versioni precedenti di SQL Server. Per aggiungere un certificato in una singola istanza di SQL Server, in una configurazione del cluster di failover o in una configurazione del gruppo di disponibilità, vedere Gestione certificati (Gestione configurazione SQL Server). Il 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 per SQL Server da usare, è necessario eseguire Gestione configurazione SQL Server con un account con 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 che non hanno SQL Server 2019 Configuration Manager

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 scegliere Aggiungi/Rimuovi snap-in dal menu File.
  3. Nella finestra di dialogo Aggiungi o Rimuovi snap-in selezionare Certificati e quindi aggiungi.
  4. Nella finestra di dialogo Snap-in Certificati selezionare Account computer e quindi selezionare Fine successiva>.
  5. Nella finestra di dialogo Aggiungi o Rimuovi snap-in selezionare 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 l'Importazione guidata certificati 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 scegliere 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 SQL Server Configurazione di rete, fare clic con il pulsante destro del mouse su Protocolli per <l'istanza> del server e scegliere Proprietà.
  10. Nella scheda Certificato della finestra di dialogo Protocolli per <il nome> dell'istanza Proprietà selezionare il certificato desiderato dall'elenco a discesa per la casella Certificato e quindi selezionare 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 la crittografia delle connessioni a SQL Server.

Nota

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

Importante

L'account del servizio SQL Server deve disporre delle autorizzazioni di lettura per il certificato usato per forzare la crittografia nell'istanza di SQL Server. Per un account del servizio senza privilegi, le autorizzazioni di lettura devono essere aggiunte 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 seguente chiave del Registro di sistema:

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 verrà 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 del Blocco note .

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

  3. Avviare l'editor del Registro di sistema, passare alla chiave del Registro di sistema seguente e copiare 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

Se il Registro di sistema viene modificato in modo non appropriato, il sistema potrebbe venire gravemente danneggiato. Prima di apportare modifiche al Registro di sistema, è consigliabile eseguire il backup di tutti i dati con valori 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 .

Quando si creano connessioni crittografate per un indicizzatore di Ricerca di Azure per SQL Server in una macchina virtuale di Azure, vedere Connessioni dell'indicizzatore a un'istanza di SQL Server in una macchina virtuale di 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 SQL Server Configurazione di rete, fare clic con il pulsante destro del mouse su Protocolli per <l'istanza> del server e quindi scegliere 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 altre informazioni, vedere Casi speciali per la crittografia delle connessioni a SQL Server.

Altre informazioni

Crittografia 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 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 questi 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 userà un certificato che soddisfi i requisiti del certificato di un'autorità di certificazione attendibile, se disponibile. Questo certificato può essere configurato manualmente dall'amministratore di sistema usando una delle procedure descritte in precedenza nell'articolo o presenti 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 genererà un certificato autofirmato (certificato di fallback) durante l'avvio e userà 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 verranno 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 altre informazioni, vedere Funzionalità deprecate del motore di database in SQL Server 2016.

In questi ambienti, se si usa il certificato autofirmato generato automaticamente da SQL Server, solo per l'handshake di pre-accesso o per crittografare tutte le comunicazioni server-client, 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 sono disponibili le opzioni seguenti:

  • Effettuare il provisioning di un nuovo certificato autofirmato o di 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 si comprende il motivo del flag, è possibile ignorare il messaggio (non consigliato).
  • Eseguire l'aggiornamento a SQL Server 2017 (14.x) o 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 di SQL Server autonoma e viene salvato nell'archivio certificati del computer locale (PowerShell deve essere avviato come amministratore):

New-SelfSignedCertificate -Type SSLServerAuthentication -Subject "CN=$env:COMPUTERNAME" `
-DnsName "[System.Net.Dns]::GetHostByName($env:computerName)",'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"