Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Versione originale del prodotto: SQL Server
Numero KB originale: 2007728
Sommario
Questo articolo consente di risolvere l'errore "Il certificato ricevuto dal server remoto è stato emesso da un'autorità di certificazione non attendibile" che si verifica quando un client effettua una connessione crittografata (TLS) a SQL Server. L'errore indica che il client non può convalidare il certificato presentato dall'istanza di SQL Server durante l'handshake TLS, in genere perché l'autorità di certificazione emittente (CA) non si trova nell'archivio autorità di certificazione radice attendibili del client o perché SQL Server usa un certificato autofirmato.
È possibile risolvere l'errore installando il certificato della CA emittente sul computer client, considerando attendibile il certificato del server senza convalida (impostazione Trust Server Certificate) oppure modificando la configurazione di crittografia sul client o sul server. Le versioni recenti di diversi driver client e strumenti hanno modificato le impostazioni predefinite in modo da richiedere la crittografia, pertanto è possibile che questo errore venga visualizzato dopo un aggiornamento del driver o dello strumento anche se non è stato modificato nulla nel server.
Sintomi
Quando ci si connette a SQL Server, è possibile che venga visualizzato il messaggio di errore seguente:
È stata stabilita una connessione con il server, ma si è verificato un errore durante il processo di accesso. (provider: Provider SSL, errore: 0 - La catena di certificati è stata emessa da un'autorità non attendibile. (Provider di dati .Net SqlClient)
Inoltre, il seguente messaggio di errore viene registrato nel registro eventi di sistema Windows:
Log Name: System
Source: Schannel
Date: 10/13/2020 3:03:31 PM
Event ID: 36882
Task Category: None
Level: Error
Keywords:
User: USERNAME
Computer: COMPUTERNAME
Description:
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.
Causa
Questo errore si verifica quando si effettua una connessione crittografata a SQL Server usando un certificato che il client non è in grado di verificare. Questo comportamento si verifica negli scenari seguenti:
| Scenario | Modello di crittografia lato server | crittografia lato client | Tipo di certificato | Autorità emittente di certificati presente nell'archivio delle Autorità di certificazione radice attendibili |
|---|---|---|---|---|
| 1 | Sì | No | Un certificato proveniente da una fonte di cui il client non si fida (l'autorità di emissione non è elencata nelle Autorità di certificazione radice attendibili nel computer client) | No |
| 2 | No | Sì | Un certificato autofirmato che SQL Server genera | No. I certificati autofirmato non vengono visualizzati in questo archivio. |
Quando un client stabilisce una connessione crittografata a SQL Server, Secure Channel (Schannel) compila l'elenco delle autorità di certificazione attendibili eseguendo una ricerca nell'archivio Autorità di certificazione radice attendibili nel computer locale. Durante l'handshake TLS, il server invia il certificato di chiave pubblica al client. L'emittente di un certificato a chiave pubblica è noto come autorità di certificazione (CA). Il client deve confermare di ritenere attendibile la CA, e ciò avviene conoscendo in anticipo le chiavi pubbliche delle CA attendibili. Quando Schannel rileva un certificato emesso da un'autorità di certificazione non attendibile, ad esempio nei due scenari precedenti, viene visualizzato il messaggio di errore elencato nella sezione Sintomi .
Se non viene configurato o rilevato alcun certificato appropriato, il motore di database genera un certificato di fallback autofirmato durante l'avvio. Usa questo certificato per crittografare le credenziali di accesso e, quando è abilitata la crittografia lato server o lato client, l'intera connessione. Nessun client considera attendibile un certificato autofirmato per impostazione predefinita, motivo per cui questo errore può verificarsi in un'installazione predefinita di SQL Server, anche quando il client e il server vengono eseguiti nello stesso computer. Per altre informazioni, vedere Crittografia dei pacchetti di accesso e crittografia dei pacchetti di dati.
Perché questo errore viene visualizzato dopo l'aggiornamento di un driver o uno strumento
Le versioni dei driver client e degli strumenti nella tabella seguente hanno modificato le impostazioni predefinite in modo da richiedere la crittografia. Dopo l'aggiornamento a una di queste versioni, il client crittografa la connessione e convalida il certificato del server anche se la configurazione del server non è stata modificata. Le versioni precedenti non richiedevano la crittografia per impostazione predefinita, quindi il certificato non è stato convalidato a meno che non sia stata richiesta in modo esplicito la crittografia.
| Driver del client o strumento | Versione | Comportamento di crittografia predefinito |
|---|---|---|
Microsoft OLE DB Driver per SQL Server (MSOLEDBSQL19) |
versione 19 e successive versioni |
Encrypt il valore predefinito è Mandatory |
| Driver ODBC di Microsoft per SQL Server | versione 18 e successive |
Encrypt il valore predefinito è Mandatory |
Microsoft.Data.SqlClient |
4.0 e versioni successive |
Encrypt il valore predefinito è True |
| SQL Server Management Studio (SSMS) | 20 e versioni successive | Per impostazione predefinita, la crittografia è obbligatoria |
Se questo errore viene visualizzato immediatamente dopo la migrazione di un'applicazione da SQL Server Native Client 11.0 (SNAC) a Microsoft OLE DB Driver 19 o Microsoft ODBC Driver 18, vedere Catena di certificati non attendibile dopo l'aggiornamento del driver.
SNAC non viene fornito con SQL Server 2022 (16.x) e versioni successive o con SSMS 19 e versioni successive e non è consigliato per il nuovo sviluppo. Utilizzare Microsoft OLE DB Driver per SQL Server, Microsoft ODBC Driver for SQL Server o Microsoft.Data.SqlClient. Per altre informazioni, vedere Criteri di supporto per SQL Server Native Client.
Soluzione
Se si usa intenzionalmente un certificato di un'autorità non attendibile o un certificato autofirmato per crittografare le connessioni a SQL Server, usare una delle opzioni seguenti:
- Per mantenere la convalida del certificato e risolvere definitivamente il problema di attendibilità, usare l'opzione 1: Installare l'autorità di certificazione nel computer client.
- Per connettersi immediatamente senza installare un certificato, usare l'opzione 2: Considerare attendibile il certificato del server senza convalidarlo. Questa opzione è la correzione più rapida ed è l'opzione necessaria per la maggior parte degli utenti quando SQL Server usa il certificato autofirmato predefinito.
- Per interrompere la crittografia o sostituire il certificato con uno di un'autorità attendibile, usare l'opzione 3: modificare la configurazione della crittografia.
Opzione 1: Installare l'autorità di certificazione nel computer client
Per lo scenario 1, aggiungere l'autorità di certificazione all'archivio "Autorità di certificazione radice attendibili" sul computer client che avvia la connessione crittografata. A questo scopo, completare le procedure Passaggio 1: Esportare il certificato del server in un file e Passaggio 2: Installare l'autorità di certificazione radice (CA) nel computer client in questa sequenza.
Passaggio 1: Esportare il certificato del server in un file
Nel computer che esegue SQL Server, esportare in un file il certificato usato da SQL Server. La procedura seguente usa caCert.cer come nome file di esempio. Questo file non esiste finché non viene creato in questa procedura. Scegliere il nome e la posizione.
Selezionare Start, immettere mmc e quindi aprire Microsoft Management Console.
Scegliere File>Aggiungi/Rimuovi snap-in.
Nell'elenco Snap-in disponibili selezionare Certificati e quindi selezionare Aggiungi.
Selezionare Account computer, selezionare Avanti, selezionare Computer locale: (il computer in cui è in esecuzione la console) e quindi selezionare Fine.
Nota
I certificati di SQL Server vengono installati nell'archivio certificati Computer locale\Personale. Se si seleziona Account utente personale, MMC apre un archivio certificati diverso e il certificato SQL Server non viene visualizzato.
Selezionare OK per chiudere la finestra di dialogo Aggiungi o Rimuovi snap-in .
Nel riquadro sinistro espandere Certificati (computer locale), espandere Personale e quindi selezionare Certificati.
Fare clic con il pulsante destro del mouse sul certificato utilizzato da SQL Server e quindi selezionare Tutte le attività>Esporta.
Tip
Per identificare il certificato usato da SQL Server, aprire Gestione configurazione SQL Server, espandere SQL Server Configurazione di rete, fare clic con il pulsante destro del mouse su Protocolli per <il nome> dell'istanza, selezionare Proprietà e quindi selezionare la scheda Certificato. Se il log degli errori SQL Server contiene la voce "Un certificato generato automaticamente è stato caricato correttamente per la crittografia", SQL Server usa un certificato di fallback generato. Non è possibile esportare il certificato, quindi usare l'opzione 2 o l'opzione 3 .
Selezionare Avanti per passare oltre la pagina Benvenuto dell'Esportazione guidata certificati.
Verificare che No, non esportare la chiave privata sia selezionata e quindi selezionare Avanti.
Assicurarsi che sia il file binario con codifica DER X.509 (. CER) o con codifica Base 64 X.509 (. CER) è selezionato e quindi selezionare Avanti.
Immettere un nome di file di esportazione, ad esempio caCert.cer.
Selezionare Avanti e quindi Fine per esportare il certificato.
Copiare il file .cer esportato nel computer client.
Passaggio 2: Installare l'autorità di certificazione radice (CA) sul computer client
Sul computer client, aprire MMC, selezionare File>, selezionare Certificati nell'elenco Snap-in disponibili e quindi selezionare Aggiungi.
Nella finestra di dialogo Snap-in Certificati selezionare Account computer e quindi selezionare Avanti.
Nel riquadro Seleziona computer selezionare Computer locale: (il computer in cui è in esecuzione la console) e quindi selezionare Fine.
Selezionare OK per chiudere la finestra di dialogo Aggiungi o Rimuovi snap-in .
Nel riquadro sinistro di MMC espandere il nodo Certificati (computer locale).
Espandere il nodo Autorità di certificazione radice attendibili, fare clic con il pulsante destro del mouse sulla sottocartella Certificati, selezionare Tutte le attività e quindi selezionare Importa.
Nella pagina iniziale della Procedura guidata importazione certificati selezionare Avanti.
Nella pagina File da importare selezionare Sfoglia.
Passare al percorso in cui si trova il file del certificato caCert.cer, selezionare il file e quindi selezionare Apri.
Nella pagina File da importare selezionare Avanti.
Nella pagina Archivio certificati accettare la selezione predefinita e quindi selezionare Avanti.
Nella pagina Completamento dell'Importazione guidata certificati, selezionare Fine.
Opzione 2: Considerare attendibile il certificato del server senza convalidarlo
Per gli scenari 1 e 2, impostare l'impostazione Certificato server di attendibilità nell'applicazione client. Questa impostazione mantiene la connessione crittografata, ma ignora la convalida del certificato. Il nome della parola chiave e i valori accettati dipendono dalla libreria client:
| Libreria del client | Parola chiave della stringa di connessione |
|---|---|
Microsoft.Data.SqlClient |
TrustServerCertificate=True |
| Driver ODBC di Microsoft per SQL Server | TrustServerCertificate=yes |
| Microsoft OLE DB Driver per SQL Server (stringa del provider) | TrustServerCertificate=yes |
Microsoft OLE DB Driver per SQL Server (ADO o IDataInitialize) |
Trust Server Certificate=true |
| Microsoft JDBC Driver per SQL Server | trustServerCertificate=true |
Se ci si connette tramite SQL Server Management Studio (SSMS) 20 o versione successiva, selezionare la casella di controllo
Per altre informazioni su come configurare questa impostazione per la libreria client, vedere gli articoli seguenti:
- Crittografia e validazione dei certificati in Microsoft. Data.SqlClient
- Crittografia e convalida del certificato nel OLE DB Driver per SQL Server
- Parole chiave e attributi per DSN e stringhe di connessione del driver ODBC per SQL Server
- Connessione con la crittografia tramite il driver JDBC Microsoft per SQL Server
- Utilizzare la crittografia senza convalida in SQL Server Native Client (client precedente)
Nota
L'impostazione Certificato server di attendibilità non disabilita la crittografia. La connessione rimane crittografata, ma il client non verifica l'identità del server.
Caution
Le connessioni crittografate che usano un certificato autofirmato non offrono una sicurezza avanzata. Sono vulnerabili ad attacchi di tipo man-in-the-middle. Non fare affidamento su TLS con certificati autofirmati in un ambiente di produzione o su server connessi a Internet.
Opzione 3: Modificare la configurazione della crittografia
Se la configurazione descritta nelle sezioni precedenti non è intenzionale, usare una delle opzioni seguenti per risolvere il problema:
Configurare il motore di database per l'uso di un certificato da un'autorità attendibile. Questa opzione è la correzione a lungo termine più sicura perché i client convalidano il certificato senza alcuna configurazione aggiuntiva. Per altre informazioni, vedere Abilitare le connessioni crittografate al Motore di database e Requisiti dei certificati per SQL Server.
Se la crittografia non è necessaria:
Disattivare la crittografia nell'applicazione client. Impostare
Encrypt=Optionalper una stringa del provider OLE DB,Use Encryption for Data=Optionalper OLE DB ADO oIDataInitialize,Encrypt=noper ODBC eEncrypt=FalseperMicrosoft.Data.SqlCliento il driver JDBC Microsoft. In SSMS 20 e nelle versioni successive, impostaCrittografia suFacoltativo nella paginaAccesso Connetti al server.Disattivare la crittografia lato server utilizzando Gestione configurazione SQL Server. Espandere SQL Server Configurazione di rete, fare clic con il pulsante destro del mouse su Protocolli per <il nome> dell'istanza, scegliere Proprietà, selezionare la scheda Flag, impostare Forza crittografia su No e quindi riavviare il servizio SQL Server. Per altre informazioni, vedere Protocolli per le proprietà MSSQLSERVER (scheda Flag).
Avvertimento
Se si disattiva la crittografia, le credenziali e i dati passano attraverso la rete non protetta. Disattivare la crittografia solo in reti attendibili e isolate.
Contenuti correlati
- Errore di convalida del certificato
- Risolvere gli errori SSL (Secure Sockets Layer) che si verificano durante il processo di accesso
- Panoramica della gestione dei certificati per SQL Server
- Casi speciali per la crittografia delle connessioni a SQL Server
- Crittografia delle connessioni a SQL Server in Linux