Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
- Om du vill behålla certifikatverifieringen och permanent åtgärda förtroendeproblemet använder du Alternativ 1: Installera certifikatutfärdare på klientdatorn.
- Om du vill ansluta omedelbart utan att installera ett certifikat använder du Alternativ 2: Lita på servercertifikatet utan att verifiera det. Det här alternativet är den snabbaste korrigeringen och det är det alternativ som de flesta användare behöver när SQL Server använder sitt självsignerade standardcertifikat.
- Om du vill sluta kräva kryptering eller ersätta certifikatet med ett från en betrodd utfärdare använder du Alternativ 3: Ändra krypteringskonfigurationen.
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.
Välj Start, ange mmc och öppna sedan Microsoft Management Console.
Välj Arkiv>Lägg till/ta bort snap-in.
I listan Tillgängliga snapin-moduler väljer du Certifikat och sedan Lägg till.
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.
Välj OK för att stänga dialogrutan Lägg till eller ta bort snapin-moduler .
Expandera Certifikat (lokal dator) i den vänstra rutan, expandera Personligt och välj sedan Certifikat.
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.
Välj Nästa för att gå förbi välkomstsidan i guiden Exportera certifikat.
Bekräfta att Nej, exportera inte den privata nyckeln är markerad och välj sedan Nästa.
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.
Ange ett exportfilnamn, till exempel caCert.cer.
Välj Nästa och sedan Slutför för att exportera certifikatet.
Kopiera den exporterade .cer filen till klientdatorn.
Steg 2: Installera rotcertifikatutfärdaren (CA) på klientdatorn
På klientdatorn öppnar du MMC, väljer Arkiv>, väljer Certifikat i listan Tillgängliga snapin-moduler och väljer sedan Lägg till.
I dialogrutan Snapin-modul för certifikat väljer du Datorkonto och sedan Nästa.
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.
Välj OK för att stänga dialogrutan Lägg till eller ta bort snapin-moduler .
I MMC:s vänstra ruta expanderar du noden Certifikat (lokal dator).
Expandera noden Betrodda rotcertifikatutfärdare, högerklicka på undermappen Certifikat, välj Alla uppgifter och välj sedan Importera.
I guiden Importera certifikat går du till sidan Välkommen och väljer Nästa.
På sidan Fil att importera väljer du Bläddra.
Bläddra till platsen för caCert.cer certifikatfilen, välj filen och välj sedan Öppna.
På sidan Fil att importera väljer du Nästa.
På sidan Certifikatarkiv godkänner du standardvalet och väljer sedan Nästa.
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örtroendeservercertifikat på inloggningssidan 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:
- Kryptering och certifikatvalidering i Microsoft. Data.SqlClient
- Kryptering och certifikatverifiering i OLE DB Driver for SQL Server
- DSN- och anslutningssträngsnyckelord och attribut för ODBC-drivrutinen för SQL Server
- Ansluta med kryptering med hjälp av Microsoft JDBC-drivrutin för SQL Server
- Använda kryptering utan validering i SQL Server intern klient (äldre klient)
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=Optionalför en OLE DB-providersträng,Use Encryption for Data=Optionalför OLE DB ADO ellerIDataInitialize,Encrypt=noför ODBC ochEncrypt=FalseförMicrosoft.Data.SqlClienteller Microsoft JDBC-drivrutin. I SSMS 20 och senare versioner anger du Kryptering till Valfritt på inloggningssidan 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.