Uso della crittografia senza convalida in SQL Server Native Client

Si applica a:SQL ServerDatabase SQL diAzure Istanzagestita di SQL di Azure Azure Synapse Analytics PlatformSystem (PDW)

Importante

SQL Server Native Client (spesso abbreviato SNAC) è stato rimosso da SQL Server 2022 (16.x) e SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider Microsoft OLE DB legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni. Passare al nuovo Microsoft OLE DB Driver (MSOLEDBSQL) per SQL Server o alla versione più recente di Microsoft ODBC Driver per SQL Server . Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni da 2012 a 2019), vedere questa eccezione relativa al ciclo di vita del supporto.

SQL Server esegue sempre la crittografia dei pacchetti di rete associati all'accesso. Se non è stato eseguito il provisioning di alcun certificato nel server all'avvio, SQL Server genera un certificato autofirmato usato per crittografare i pacchetti di accesso.

I certificati autofirmati non garantiscono la sicurezza. Lo handshake crittografato è basato su NT LAN Manager (NTLM). È consigliabile eseguire 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 parole chiave della stringa di connessione o le proprietà di connessione. Le parole chiave sono "Encrypt" per ODBC e OLE DB quando si usa una stringa del provider con IDbInitialize::Initialize o "Use Encryption for Data" per ADO e OLE DB quando si usa una stringa di inizializzazione con IDataInitialize. Questa operazione può essere configurata anche da Gestione configurazione SQL Server usando l'opzione Force Protocol Encryption e configurando il client per richiedere connessioni crittografate. Per impostazione predefinita, la crittografia di tutto il traffico di rete per una connessione richiede che nel server sia stato eseguito 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, assicurarsi di impostare le opzioni client relative all'attendibilità del certificato su FALSE.

Per informazioni sulle parole chiave della stringa di connessione, vedere Uso delle parole chiave delle stringhe di connessione con SQL Server Native Client.

Per abilitare la crittografia da usare quando non è stato effettuato il provisioning di un certificato nel server, è possibile usare Gestione configurazione SQL Server per impostare sia le opzioni Force Protocol Encryption che Trust Server Certificate . In questo caso, la crittografia utilizzerà un certificato server autofirmato senza convalida se nel server non è stato eseguito il provisioning di alcun certificato verificabile.

Le applicazioni possono inoltre utilizzare la parola chiave "TrustServerCertificate" o il relativo attributo di connessione associato per garantire l'utilizzo della crittografia. Le impostazioni dell'applicazione non riducono mai il livello di sicurezza impostato da Gestione configurazione client di SQL Server, ma possono rafforzarlo. Un'applicazione può ad esempio richiedere la crittografia, se non è stata impostata l'opzione Forza crittografia protocollo per il client. Per garantire che la crittografia venga applicata anche quando non è stato eseguito il provisioning di un certificato server, un'applicazione può richiedere la crittografia e "TrustServerCertificate". Tuttavia, se TrustServerCertificate non è attivata nella configurazione client, è comunque necessario il provisioning di un certificato server. Nella tabella seguente vengono descritti tutti i casi:

Impostazione client Forza crittografia protocollo Impostazione client Considera attendibile certificato server Attributo/stringa di connessione Encrypt/Use Encryption for Data Attributo/stringa di connessione Trust Server Certificate Risultato
No N/D Nessuno (impostazione predefinita) Ignorato Nessuna crittografia.
No N/D Nessuno (impostazione predefinita) La crittografia viene applicata solo se è disponibile un certificato server verificabile; in caso contrario, il tentativo di connessione non riesce.
No N/D La crittografia viene sempre applicata, ma può essere utilizzato un certificato server auto-firmato.
No Ignorato Ignorato La crittografia viene applicata solo se è disponibile un certificato server verificabile; in caso contrario, il tentativo di connessione non riesce.
Nessuno (impostazione predefinita) Ignorato La crittografia viene sempre applicata, ma può essere utilizzato un certificato server auto-firmato.
Nessuno (impostazione predefinita) La crittografia viene applicata solo se è disponibile un certificato server verificabile; in caso contrario, il tentativo di connessione non riesce.
La crittografia viene sempre applicata, ma può essere utilizzato un certificato server auto-firmato.

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 l'impostazione TrustServerCertificate nel client sia FALSE.

Provider OLE DB di SQL Server Native Client

Il provider OLE DB di SQL Server Native Client supporta la crittografia senza convalida tramite l'aggiunta della proprietà di inizializzazione dell'origine dati SSPROP_INIT_TRUST_SERVER_CERTIFICATE, implementata nel set di proprietà DBPROPSET_SQLSERVERDBINIT. È stata inoltre aggiunta una nuova parola chiave, "TrustServerCertificate", per la stringa di connessione. Accetta i valori yes o no. Il valore predefinito è no. Quando si utilizzano i componenti del servizio, accetta i valori true o false; false è l'impostazione predefinita.

Per altre informazioni sui miglioramenti apportati al set di proprietà DBPROPSET_SQLSERVERDBINIT, vedere Proprietà di inizializzazione e di autorizzazione.

Driver ODBC di SQL Server Native Client

Il driver ODBC di SQL Server Native Client supporta la crittografia senza convalida tramite aggiunte alle funzioni SQLSetConnectAttr e SQLGetConnectAttr . SQL_COPT_SS_TRUST_SERVER_CERTIFICATE è stato aggiunto per accettare SQL_TRUST_SERVER_CERTIFICATE_YES o SQL_TRUST_SERVER_CERTIFICATE_NO. SQL_TRUST_SERVER_CERTIFICATE_NO è l'impostazione predefinita. È stata inoltre aggiunta una nuova parola chiave, "TrustServerCertificate", per la stringa di connessione. Accetta i valori yes o no. Il valore predefinito è "no".

Vedi anche

Funzionalità di SQL Server Native Client