Crittografia delle connessioni a SQL Server

SQL Server supporta Secure Sockets Layer (SSL) ed è compatibile con Internet Protocol Security (IPSec).

SSL (Secure Sockets Layer)

Microsoft SQL Server può utilizzare Secure Sockets Layer (SSL) per crittografare i dati trasmessi attraverso una rete tra un'istanza di SQL Server e un'applicazione client. La crittografia SSL viene eseguita a livello di protocollo ed è disponibile per tutti i client SQL Server ad eccezione dei client DB Library e MDAC 2.53.

È possibile utilizzare SSL per la convalida del server quando è necessaria la crittografia per una connessione client. Se l'istanza di SQL Server è in esecuzione in un computer a cui è stato assegnato un certificato da un'autorità di certificazione pubblica, l'identità del computer e dell'istanza di SQL Server viene garantita dalla catena di certificati che fanno riferimento all'autorità radice attendibile. In questo caso per la convalida del server è necessario che il computer in cui viene eseguita l'applicazione client sia configurato in modo da considerare attendibile l'autorità radice del certificato utilizzato dal server. È anche possibile utilizzare la crittografia con un certificato autofirmato, come descritto nella sezione successiva, sebbene un certificato autofirmato offra un livello di protezione limitato.

Il livello di crittografia utilizzato da SSL, a 40 bit o a 128 bit, varia a seconda della versione del sistema operativo Microsoft Windows in esecuzione nei computer delle applicazioni e dei database.

L'abilitazione della crittografia SSL contribuisce alla sicurezza del traffico di dati in rete tra le istanze di SQL Server e le applicazioni, ma comporta un rallentamento delle prestazioni. Quando tutto il traffico tra SQL Server e un'applicazione client è crittografato con SSL, sono necessarie le operazioni di elaborazione aggiuntive seguenti:

  • Al momento della connessione è necessario un ulteriore round trip in rete.

  • I pacchetti inviati dall'applicazione all'istanza di SQL Server devono essere crittografati dalla libreria di rete client e decrittografati dalla libreria di rete server.

  • I pacchetti inviati dall'istanza di SQL Server all'applicazione devono essere crittografati dalla libreria di rete server e decrittografati dalla libreria di rete client.

Configurazione di SSL per SQL Server

Nella procedura seguente viene descritto come configurare SSL per SQL Server.

Per configurare SSL

  1. Installare un certificato nell'archivio certificati di Windows del server.

  2. Fare clic sul pulsante Start, quindi nel gruppo di programmi Microsoft SQL Server scegliere Strumenti di configurazione e infine fare clic su Gestione configurazione SQL Server.

  3. Espandere Configurazione di rete SQL Server, fare clic con il pulsante destro del mouse sui protocolli per il server desiderati e quindi scegliere Proprietà.

    Nota

    Questa è la sezione Protocolli per<instance_name> nel riquadro sinistro dello strumento e non corrisponde a un protocollo specifico nel riquadro destro.

  4. Nella scheda Certificato configurare il Motore di database in modo da utilizzare il certificato.

  5. Nella scheda Flag visualizzare o specificare l'opzione di crittografia del protocollo. Il pacchetto di accesso verrà sempre crittografato.

    • Quando l'opzione Forza crittografia per Motore di database è impostata su , tutte le comunicazioni client/server verranno crittografate e verrà negato l'accesso ai client che non supportano la crittografia.

    • Quando l'opzione Forza crittografia per Motore di database è impostata su No, l'applicazione client può richiedere la crittografia anche se tale funzionalità non è necessaria.

    • Dopo la modifica dell'impostazione di Forza crittografia, è necessario riavviare SQL Server.

    Le credenziali nel pacchetto di accesso trasmesse quando un'applicazione client si connette a SQL Server vengono sempre crittografate. SQL Server utilizzerà un certificato di un'autorità di certificazione attendibile, se disponibile. Se non viene installato un certificato attendibile, SQL Server genererà un certificato autofirmato all'avvio dell'istanza e lo utilizzerà per crittografare le credenziali. Questo certificato autofirmato aumenta il livello di sicurezza, ma non protegge contro lo spoof di identità da parte del server. Se viene utilizzato il certificato autofirmato e il valore dell'opzione Forza crittografia è , tutti i dati trasmessi attraverso una rete tra SQL Server e l'applicazione client verranno crittografati con il certificato autofirmato.

    Nota di attenzioneAttenzione

    Le connessioni SSL crittografate con un certificato autofirmato non offrono un livello di sicurezza elevato. Sono infatti soggette ad attacchi di tipo man-in-the-middle. Non è consigliabile affidarsi all'SSL utilizzando certificati autofirmati in un ambiente di produzione o su server connessi a Internet.

Requisiti per i certificati

Affinché un certificato SSL venga caricato da SQL Server, è necessario che vengano soddisfatte le condizioni seguenti:

  • Il certificato deve essere presente nell'archivio certificati del computer locale oppure nell'archivio certificati dell'utente corrente.

  • L'ora di sistema corrente deve essere successiva al valore della proprietà Valid from del certificato e antecedente al valore della proprietà Valid to del certificato.

  • Il certificato deve essere destinato all'autenticazione del server. Pertanto è necessaria la proprietà Enhanced Key Usage del certificato per specificare Server Authentication (1.3.6.1.5.5.7.3.1).

  • Il certificato deve essere creato tramite l'opzione KeySpec di AT_KEYEXCHANGE. In genere, nella proprietà del certificato relativa all'utilizzo della chiave (KEY_USAGE) è inclusa anche la crittografia della chiave (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • Nella proprietà Subject del certificato deve essere specificato che il nome comune (CN, Common Name) corrisponde al nome host oppure al nome di dominio completo (FQDN, Fully Qualified Domain Name) del server. Se SQL Server viene eseguito in un cluster di failover, è necessario che il nome comune corrisponda al nome host oppure al nome di dominio completo del server virtuale e che i certificati siano disponibili in tutti i nodi del cluster di failover.

  • SQL Server 2008 R2 e SQL Server 2008 R2 Native Client supportano i certificati con caratteri jolly. Altri client potrebbero non supportare questo tipo di certificati. Per ulteriori informazioni, vedere la documentazione del client e l'articolo KB258858.

Requisiti dei certificati di SQL Server Native Client

Le applicazioni in cui viene utilizzato "SERVER=shortname; ENCRYPT=yes" con un certificato il cui Subjects consenta di specificare nomi di dominio completi sono state collegate in passato grazie a una convalida flessibile. SQL Server 2008 R2 migliora la sicurezza applicando una corrispondenza esatta degli oggetti per i certificati. Per le applicazioni che si basano su una convalida flessibile è necessario eseguire una delle operazioni seguenti:

  • Utilizzare il nome di dominio completo nella stringa di connessione.

    • Questa opzione non richiede la ricompilazione dell'applicazione se la parola chiave SERVER della stringa di connessione viene configurata all'esterno dell'applicazione.

    • Questa opzione non funziona con le applicazioni che dispongono di stringhe di connessione hardcoded.

    • Questa opzione non funziona con le applicazioni che utilizzano il mirroring del database in quanto il server con mirroring risponde con un nome semplice.

  • Aggiungere un alias in modo da eseguire il mapping di shortname al nome di dominio completo.

    • Questa opzione funziona anche con le applicazioni che dispongono di stringhe di connessione hardcoded.

    • Questa opzione non funziona con le applicazioni che utilizzano il mirroring del database in quanto i provider non cercano gli alias dei nomi dei partner di failover ricevuti.

  • Ottenere un certificato emesso per shortname.

    • Questa opzione funziona con tutte le applicazioni.

Crittografia in un cluster

Se si desidera utilizzare la crittografia in un cluster di failover, è necessario installare il certificato server contenente il nome DNS completo dell'istanza cluster di failover in tutti i nodi del cluster di failover. Se, ad esempio, sono presenti un cluster con due nodi denominati test1.your company.com e test2. your company.com e un'istanza cluster di failover di SQL Server denominata fcisql, è necessario ottenere un certificato per fcisql.your company.com e installarlo in entrambi i nodi. Per configurare il cluster di failover per la crittografia, è quindi possibile selezionare la casella di controllo ForceEncryption nella finestra delle proprietà Protocolli per <server> di Configurazione di rete SQL Server.

Internet Protocol Security (IPSec)

Per crittografare i dati di SQL Server durante la trasmissione, è possibile utilizzare IPSec, disponibile nei sistemi operativi client e server e non richiede alcuna configurazione di SQL Server. Per informazioni su IPSec, vedere la documentazione di Windows o relativa alle reti.