Felet "Certifikatet som togs emot från fjärrservern utfärdades av en ej betrodd certifikatutfärdare" när du ansluter till SQL Server

Ursprunglig produktversion: SQL Server
Ursprungligt KB-nummer: 2007728

Sammanfattning

Den här artikeln hjälper dig att lösa felet "Certifikatet som togs emot från fjärrservern utfärdades av en ej betrodd certifikatutfärdare" som inträffar när en klient upprättar en krypterad anslutning (TLS) till SQL Server. Felet innebär att klienten inte kan verifiera certifikatet som SQL Server-instansen presenterar under TLS-handskakningen, vanligtvis på grund av att den utfärdande certifikatutfärdare (CA) inte finns i klientens arkiv för betrodda rotcertifikatutfärdare, eller för att SQL Server använder ett självsignerat certifikat.

Du kan lösa felet genom att installera certifikatutfärdarcertifikatet på klientdatorn, genom att lita på servercertifikatet utan validering (inställningen Förtroendeservercertifikat ) eller genom att ändra krypteringskonfigurationen på klienten eller servern. De senaste versionerna av flera klientdrivrutiner och verktyg har ändrat sina standardvärden för att kräva kryptering, så du kan se det här felet efter en drivrutins- eller verktygsuppgradering trots att inget har ändrats på servern.

Symtom

När du ansluter till SQL Server kan du få följande felmeddelande:

En anslutning upprättades med servern, men sedan uppstod ett fel under inloggningsprocessen. (provider: SSL-provider, fel: 0 – Certifikatkedjan utfärdades av en utfärdare som inte är betrodd.) (.Net SqlClient Data Provider)

Dessutom loggas följande felmeddelande i händelseloggen Windows System:

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.

Orsak

Det här felet uppstår när du upprättar en krypterad anslutning till SQL Server med hjälp av ett certifikat som klienten inte kan verifiera. Det här beteendet inträffar i följande scenarier:

Scenario Kryptering på serversidan Kryptering på klientsidan Certifikattyp Certifikatutfärdare som finns i arkivet Betrodda rotcertifikatutfärdare
1 Ja Nej Ett certifikat från en källa som klienten inte litar på (den utfärdande utfärdaren visas inte i Betrodda rotcertifikatutfärdare på klientdatorn) Nej
2 Nej Ja Ett självsignerat certifikat som SQL Server genererar Nej. Självsignerade certifikat visas inte i detta lager.

När en klient upprättar en krypterad anslutning till SQL Server skapar Secure Channel (Schannel) listan över betrodda certifikatutfärdare genom att söka i arkivet Betrodda rotcertifikatutfärdare på den lokala datorn. Under TLS-handskakningen skickar servern sitt offentliga nyckelcertifikat till klienten. Utfärdaren av ett offentligt nyckelcertifikat kallas certifikatutfärdare (CA). Klienten måste bekräfta att den litar på certifikatutfärdare, vilket den gör genom att känna till de offentliga nycklarna för betrodda certifikatutfärdare i förväg. När Schannel identifierar ett certifikat som en ej betrodd certifikatutfärdare har utfärdat, till exempel i de föregående två scenarierna, visas felmeddelandet i avsnittet Symptom .

Om inget lämpligt certifikat har konfigurerats eller identifierats genererar Database Engine ett självsignerat reservcertifikat under starten. Det använder det här certifikatet för att kryptera inloggningsuppgifter och, när kryptering på serversidan eller klientsidan är aktiverat, hela anslutningen. Ingen klient litar på ett självsignerat certifikat som standard, vilket är anledningen till att det här felet kan inträffa vid en standardinstallation av SQL Server, även när klienten och servern körs på samma dator. Mer information finns i Kryptering av inloggningspaket jämfört med kryptering av datapaket.

Varför det här felet visas efter en drivrutin eller verktygsuppgradering

Klientdrivrutinen och verktygsversionerna i följande tabell ändrade sina standardvärden för att kräva kryptering. När du har uppgraderat till någon av dessa versioner krypterar klienten anslutningen och validerar servercertifikatet även om serverkonfigurationen inte ändrades. Tidigare versioner krävde inte kryptering som standard, så certifikatet verifierades inte om du inte uttryckligen begärde kryptering.

Klientdrivrutin eller verktyg Version Standardkrypteringsbeteende
Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL19) 19 och senare versioner Encrypt har standardvärdet Mandatory
Microsoft ODBC-drivrutin för SQL Server 18 och senare versioner Encrypt har standardvärdet Mandatory
Microsoft.Data.SqlClient 4.0 och senare versioner Encrypt har standardvärdet True
SQL Server Management Studio (SSMS) 20 och senare versioner Kryptering är som standard obligatoriskt

Om du ser det här felet omedelbart efter att du migrerat ett program från SQL Server Native Client 11.0 (SNAC) till Microsoft OLE DB Driver 19 eller Microsoft ODBC Driver 18, se Certifikatkedjan är inte betrodd efter uppgradering av drivrutinen.

SNAC levereras inte med SQL Server 2022 (16.x) och senare versioner eller med SSMS 19 och senare versioner, och det rekommenderas inte för ny utveckling. Använd Microsoft OLE DB Driver for SQL Server, Microsoft ODBC-drivrutin för SQL Server eller Microsoft.Data.SqlClient i stället. Mer information finns i Supportprinciper för SQL Server intern klient.

Lösning

Om du avsiktligt använder antingen ett certifikat från en icke-betrodd utfärdare eller ett självsignerat certifikat för att kryptera anslutningar till SQL Server använder du något av följande alternativ:

Alternativ 1: Installera certifikatutfärdare på klientdatorn

För scenario 1 lägger du till certifikatutfärdare i arkivet Betrodda rotcertifikatutfärdare på klientdatorn som initierar den krypterade anslutningen. För att göra detta utför du Steg 1: Exportera servercertifikatet till en fil och Steg 2: Installera rotcertifikatutfärdaren (CA) på klientdatorn i den ordningen.

Steg 1: Exportera servercertifikatet till en fil

Exportera certifikatet som SQL Server använder till en fil på den SQL Server datorn. Följande steg använder caCert.cer som ett exempel på filnamn. Den här filen finns inte förrän du har skapat den i den här proceduren. Du väljer namn och plats.

  1. Välj Start, ange mmc och öppna sedan Microsoft Management Console.

  2. Välj Arkiv>Lägg till/ta bort snap-in.

  3. I listan Tillgängliga snapin-moduler väljer du Certifikat och sedan Lägg till.

  4. Välj Datorkonto, välj Nästa, välj Lokal dator: (datorn som konsolen körs på)och välj sedan Slutför.

    Kommentar

    SQL Server-certifikat installeras i certifikatarkivet Lokal dator\Personligt. Om du väljer Mitt användarkonto öppnar MMC ett annat certifikatarkiv och SQL Server certifikatet visas inte.

  5. Välj OK för att stänga dialogrutan Lägg till eller ta bort snapin-moduler .

  6. Expandera Certifikat (lokal dator) i den vänstra rutan, expandera Personligt och välj sedan Certifikat.

  7. Högerklicka på certifikatet som SQL Server använder och välj sedan Exportera alla uppgifter>.

    Tip

    Om du vill identifiera certifikatet som SQL Server använder öppnar du SQL Server Configuration Manager, expanderar SQL Server Nätverkskonfiguration, högerklickar på Protokoll för <instansnamn>, väljer Egenskaper och väljer sedan fliken Certifikat. Om SQL Server-felloggen innehåller posten "Ett självgenererat certifikat har lästs in för kryptering" använder SQL Server ett genererat återställningscertifikat. Du kan inte exportera certifikatet, så använd alternativ 2 eller alternativ 3 i stället.

  8. Välj Nästa för att gå förbi välkomstsidan i guiden Exportera certifikat.

  9. Bekräfta att Nej, exportera inte den privata nyckeln är markerad och välj sedan Nästa.

  10. Kontrollera att antingen DER-kodad binär X.509 (. CER) eller Base-64-kodad X.509 (. CER) har valts och välj sedan Nästa.

  11. Ange ett exportfilnamn, till exempel caCert.cer.

  12. Välj Nästa och sedan Slutför för att exportera certifikatet.

  13. Kopiera den exporterade .cer filen till klientdatorn.

Steg 2: Installera rotcertifikatutfärdaren (CA) på klientdatorn

  1. På klientdatorn öppnar du MMC, väljer Arkiv>, väljer Certifikat i listan Tillgängliga snapin-moduler och väljer sedan Lägg till.

  2. I dialogrutan Snapin-modul för certifikat väljer du Datorkonto och sedan Nästa.

  3. I fönstret Välj dator väljer du Lokal dator: (datorn som den här konsolen körs på)och väljer sedan Slutför.

  4. Välj OK för att stänga dialogrutan Lägg till eller ta bort snapin-moduler .

  5. I MMC:s vänstra ruta expanderar du noden Certifikat (lokal dator).

  6. Expandera noden Betrodda rotcertifikatutfärdare, högerklicka på undermappen Certifikat, välj Alla uppgifter och välj sedan Importera.

  7. I guiden Importera certifikat går du till sidan Välkommen och väljer Nästa.

  8. På sidan Fil att importera väljer du Bläddra.

  9. Bläddra till platsen för caCert.cer certifikatfilen, välj filen och välj sedan Öppna.

  10. På sidan Fil att importera väljer du Nästa.

  11. På sidan Certifikatarkiv godkänner du standardvalet och väljer sedan Nästa.

  12. På sidan Slutföra guiden Importera certifikat väljer du Slutför.

Alternativ 2: Lita på servercertifikatet utan att verifiera det

För scenarier 1 och 2 anger du inställningen Förtroendeservercertifikat i klientprogrammet. Den här inställningen håller anslutningen krypterad men hoppar över certifikatverifieringen. Nyckelordets namn och godkända värden beror på klientbiblioteket:

Klientbibliotek Nyckelord för anslutningssträng
Microsoft.Data.SqlClient TrustServerCertificate=True
Microsoft ODBC-drivrutin för SQL Server TrustServerCertificate=yes
Microsoft OLE DB Driver for SQL Server (providersträng) TrustServerCertificate=yes
Microsoft OLE DB Driver for SQL Server (ADO eller IDataInitialize) Trust Server Certificate=true
Microsoft JDBC-drivrutin för SQL Server trustServerCertificate=true

Om du ansluter med hjälp av SQL Server Management Studio (SSMS) 20 eller en senare version markerar du kryssrutan Förtroendeservercertifikatinloggningssidan i dialogrutan Anslut till server. I tidigare versioner av SSMS väljer du Alternativ i fönstret Anslut till server , väljer fliken Anslutningsegenskaper och väljer sedan Förtroendeservercertifikat.

Mer information om hur du konfigurerar den här inställningen för klientbiblioteket finns i följande artiklar:

Kommentar

Inställningen Förtroendeservercertifikat inaktiverar inte kryptering. Anslutningen förblir krypterad, men klienten verifierar inte serverns identitet.

Försiktighet

Krypterade anslutningar som använder ett självsignerat certifikat ger inte stark säkerhet. De är sårbara för "man-in-the-middle"-attacker. Förlita dig inte på TLS med självsignerade certifikat i en produktionsmiljö eller på servrar som är anslutna till Internet.

Alternativ 3: Ändra krypteringskonfigurationen

Om konfigurationen som beskrivs i föregående avsnitt är oavsiktlig använder du något av följande alternativ för att lösa problemet:

  • Konfigurera Database Engine att använda ett certifikat från en betrodd utfärdare. Det här alternativet är den säkraste långsiktiga korrigeringen eftersom klienter sedan validerar certifikatet utan någon extra konfiguration. Mer information finns i Aktivera krypterade anslutningar till Database Engine- och certifikatkraven för SQL Server.

  • Om kryptering inte krävs:

    • Inaktivera kryptering i klientprogrammet. Ange Encrypt=Optional för en OLE DB-providersträng, Use Encryption for Data=Optional för OLE DB ADO eller IDataInitialize, Encrypt=no för ODBC och Encrypt=False för Microsoft.Data.SqlClient eller Microsoft JDBC-drivrutin. I SSMS 20 och senare versioner anger du Kryptering till Valfrittinloggningssidan i dialogrutan Anslut till server .

    • Inaktivera kryptering på serversidan med hjälp av SQL Server Configuration Manager. Expandera SQL Server Nätverkskonfiguration, högerklicka på Protokoll för <instansnamn>, välj Egenskaper, välj fliken Flaggor, ange Tvinga kryptering till Nej och starta sedan om SQL Server-tjänsten. Mer information finns i Protokoll för MSSQLSERVER-egenskaper (fliken Flaggor).

      Varning

      Om du inaktiverar kryptering överförs autentiseringsuppgifter och data över nätverket utan skydd. Inaktivera endast kryptering i betrodda, isolerade nätverk.