Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 2007728
Podsumowanie
Ten artykuł ułatwia rozwiązanie błędu "Certyfikat otrzymany z serwera zdalnego został wystawiony przez niezaufany urząd certyfikacji", który występuje, gdy klient nawiązuje zaszyfrowane połączenie (TLS) z SQL Server. Błąd oznacza, że klient nie może zweryfikować certyfikatu, który występuje w wystąpieniu SQL Server podczas uzgadniania protokołu TLS, zwykle dlatego, że urząd wystawiający certyfikaty nie znajduje się w magazynie zaufanych głównych urzędów certyfikacji klienta lub ponieważ SQL Server używa certyfikatu z podpisem własnym.
Ten błąd można rozwiązać, instalując certyfikat wystawiającego urzędu certyfikacji na komputerze klienckim, ufając certyfikatowi serwera bez walidacji (ustawienie Certyfikat serwera zaufania ) lub zmieniając konfigurację szyfrowania na kliencie lub serwerze. Najnowsze wersje kilku sterowników klienta i narzędzi zmieniły ich wartości domyślne, aby wymagać szyfrowania, więc ten błąd może wystąpić po uaktualnieniu sterownika lub narzędzia, mimo że nic się nie zmieniło na serwerze.
Objawy
Podczas nawiązywania połączenia z SQL Server może zostać wyświetlony następujący komunikat o błędzie:
Połączenie z serwerem zostało pomyślnie nawiązane, ale wystąpił błąd podczas procesu logowania. (dostawca: dostawca SSL, błąd: 0 — łańcuch certyfikatów został wystawiony przez urząd, który nie jest zaufany). (.Net SqlClient Dostawca danych)
Ponadto w dzienniku zdarzeń systemu Windows jest rejestrowany następujący komunikat o błędzie:
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.
Przyczyna
Ten błąd występuje podczas nawiązywania zaszyfrowanego połączenia z SQL Server przy użyciu certyfikatu, którego klient nie może zweryfikować. To zachowanie odbywa się w następujących scenariuszach:
| Scenariusz | Szyfrowanie po stronie serwera | Szyfrowanie po stronie klienta | Typ certyfikatu | Urząd wystawiający certyfikaty obecny w magazynie zaufanych głównych urzędów certyfikacji |
|---|---|---|---|---|
| 1 | Tak | Nie. | Certyfikat ze źródła, któremu klient nie ufa (urząd wystawiający nie jest wymieniony w zaufanych głównych urzędach certyfikacji na komputerze klienckim) | Nie. |
| 2 | Nie. | Tak | Certyfikat z podpisem własnym, który SQL Server generuje | No. Certyfikaty z podpisem własnym nie są wyświetlane w tym magazynie. |
Gdy klient nawiązuje szyfrowane połączenie z programem SQL Server, Secure Channel (Schannel) buduje listę zaufanych urzędów certyfikacji, przeszukując na komputerze lokalnym magazyn Zaufane główne urzędy certyfikacji. Podczas uzgadniania połączenia TLS serwer wysyła klientowi swój certyfikat z kluczem publicznym. Wystawca certyfikatu klucza publicznego jest znany jako urząd certyfikacji. Klient musi potwierdzić, że ufa urzędowi certyfikacji, co robi, znając klucze publiczne zaufanych urzędów certyfikacji z wyprzedzeniem. Gdy usługa Schannel wykryje certyfikat wystawiony przez niezaufany urząd certyfikacji, taki jak w poprzednich dwóch scenariuszach, zostanie wyświetlony komunikat o błędzie wymieniony w sekcji Objawy .
Jeśli nie skonfigurowano lub wykryto odpowiedniego certyfikatu, Database Engine generuje certyfikat rezerwowy z podpisem własnym podczas uruchamiania. Używa tego certyfikatu do szyfrowania poświadczeń logowania i po włączeniu szyfrowania po stronie serwera lub po stronie klienta całe połączenie. Klient nie ufa domyślnie certyfikatowi z podpisem własnym, dlatego ten błąd może wystąpić w domyślnej instalacji SQL Server, nawet jeśli klient i serwer działają na tym samym komputerze. Aby uzyskać więcej informacji, zobacz Szyfrowanie pakietów logowania i szyfrowanie pakietów danych.
Dlaczego ten błąd pojawia się po uaktualnieniu sterownika lub narzędzia
Wersje sterowników i narzędzi klienta w poniższej tabeli zmieniły ustawienia domyślne, aby wymagać szyfrowania. Po uaktualnieniu do jednej z tych wersji klient szyfruje połączenie i weryfikuje certyfikat serwera, mimo że konfiguracja serwera nie uległa zmianie. Wcześniejsze wersje nie wymagały szyfrowania domyślnie, więc certyfikat nie został zweryfikowany, chyba że jawnie zażądano szyfrowania.
| Sterownik klienta lub narzędzie | Version | Domyślne zachowanie szyfrowania |
|---|---|---|
Sterownik Microsoft OLE DB Driver dla programu SQL Server (MSOLEDBSQL19) |
19 i nowsze wersje |
Encrypt wartość domyślna: Mandatory |
| Sterownik ODBC firmy Microsoft dla programu SQL Server | 18 i nowsze wersje |
Encrypt wartość domyślna: Mandatory |
Microsoft.Data.SqlClient |
4.0 i nowsze wersje |
Encrypt wartość domyślna: True |
| SQL Server Management Studio (SSMS) | 20 i nowsze wersje | Wartość domyślna szyfrowania to Obowiązkowe |
Jeśli zobaczysz ten błąd natychmiast po zmigrowaniu aplikacji z SQL Server Native Client 11.0 (SNAC) do sterownika Microsoft OLE DB Driver 19 lub sterownika Microsoft ODBC Driver 18, zapoznaj się z tematem Łańcuch certyfikatów nie jest zaufany po uaktualnieniu sterownika.
Funkcja SNAC nie jest dostarczana z SQL Server 2022 (16.x) i nowszymi wersjami ani z programem SSMS 19 i nowszymi wersjami i nie jest zalecana w przypadku nowego programowania. Użyj sterownika Microsoft OLE DB Driver for SQL Server, sterownika Microsoft ODBC Driver for SQL Server lub Microsoft.Data.SqlClient zamiast niego. Aby uzyskać więcej informacji, zobacz Zasady pomocy technicznej dla klienta natywnego SQL Server.
Rozwiązanie
Jeśli celowo używasz certyfikatu z niezaufanego urzędu lub certyfikatu z podpisem własnym do szyfrowania połączeń z SQL Server, użyj jednej z następujących opcji:
- Aby zachować walidację certyfikatu i trwale rozwiązać problem z zaufaniem, użyj opcji 1: Zainstaluj urząd certyfikacji na komputerze klienckim.
- Aby nawiązać połączenie natychmiast bez instalowania certyfikatu, użyj opcji 2: Ufaj certyfikatowi serwera bez sprawdzania jego poprawności. Ta opcja jest najszybszą poprawką i jest to opcja, którą większość użytkowników potrzebuje, gdy SQL Server używa domyślnego certyfikatu z podpisem własnym.
- Aby przestać wymagać szyfrowania lub zastąpić certyfikat jednym z zaufanego urzędu, użyj opcji 3: Zmień konfigurację szyfrowania.
Opcja 1. Instalowanie urzędu certyfikacji na komputerze klienckim
W scenariuszu 1 dodaj urząd certyfikacji do magazynu zaufanych głównych urzędów certyfikacji na komputerze klienckim, który inicjuje zaszyfrowane połączenie. Aby to zrobić, wykonaj procedury Krok 1: Eksportowanie certyfikatu serwera do pliku oraz Krok 2: Instalowanie głównego urzędu certyfikacji (CA) na komputerze klienckim w tej kolejności.
Krok 1. Eksportowanie certyfikatu serwera do pliku
Na komputerze SQL Server wyeksportuj certyfikat używany SQL Server do pliku. Poniższe kroki służą caCert.cer jako przykładowej nazwy pliku. Ten plik nie istnieje, dopóki nie zostanie utworzony w tej procedurze. Należy wybrać nazwę i lokalizację.
Wybierz przycisk Start, wprowadź mmc, a następnie otwórz Microsoft Management Console.
Wybierz Plik>Dodaj/Usuń przystawkę.
Z listy Dostępne przystawki wybierz pozycję Certyfikaty, a następnie wybierz przycisk Dodaj.
Wybierz pozycję Konto komputera, wybierz przycisk Dalej, wybierz pozycję Komputer lokalny: (komputer, na którym działa ta konsola), a następnie wybierz pozycję Zakończ.
Uwaga
Certyfikaty programu SQL Server są instalowane w magazynie certyfikatów Komputer lokalny\Osobisty. Jeśli wybierzesz pozycję Moje konto użytkownika, program MMC otworzy inny magazyn certyfikatów, a certyfikat SQL Server nie zostanie wyświetlony.
Wybierz przycisk OK , aby zamknąć okno dialogowe Dodawanie lub usuwanie przystawek .
W okienku po lewej stronie rozwiń węzeł Certyfikaty (komputer lokalny), rozwiń węzeł Osobiste, a następnie wybierz pozycję Certyfikaty.
Kliknij prawym przyciskiem myszy certyfikat, który SQL Server używa, a następnie wybierz pozycję Wszystkie zadania>Eksportuj.
Wskazówka
Aby zidentyfikować certyfikat używany przez SQL Server, otwórz SQL Server Configuration Manager, rozwiń węzeł SQL Server Konfiguracja sieci, kliknij prawym przyciskiem myszy pozycję Protokoły dla <nazwy> wystąpienia, wybierz pozycję Właściwości, a następnie wybierz kartę Certyfikat. Jeśli dziennik błędów SQL Server zawiera wpis "Certyfikat wygenerowany samodzielnie został pomyślnie załadowany do szyfrowania", SQL Server używa wygenerowanego certyfikatu rezerwowego. Nie można wyeksportować tego certyfikatu, dlatego zamiast tego użyj opcji 2 lub opcji 3 .
Wybierz przycisk Dalej , aby przejść obok strony powitalnejKreatora eksportu certyfikatów.
Upewnij się, że wybrano pozycję Nie, nie eksportuj klucza prywatnego, a następnie wybierz przycisk Dalej.
Upewnij się, że wybrano opcję kodowanie binarne DER X.509 (.CER) lub kodowanie Base-64 X.509 (.CER), a następnie wybierz Dalej.
Wprowadź nazwę pliku eksportu, na przykład caCert.cer.
Wybierz przycisk Dalej, a następnie wybierz pozycję Zakończ , aby wyeksportować certyfikat.
Skopiuj wyeksportowany plik .cer na komputer kliencki.
Krok 2: Zainstaluj główny urząd certyfikacji (CA) na komputerze klienckim
Na komputerze klienckim otwórz program MMC, wybierz pozycjęDodaj/Usuń przystawkęPlik>, wybierz pozycję Certyfikaty na liście Dostępne przystawki, a następnie wybierz pozycję Dodaj.
W oknie dialogowym przystawki Certyfikaty wybierz pozycję Konto komputera, a następnie wybierz przycisk Dalej.
W okienku Wybierz komputer wybierz pozycję Komputer lokalny: (komputer, na którym działa ta konsola), a następnie wybierz pozycję Zakończ.
Wybierz przycisk OK , aby zamknąć okno dialogowe Dodawanie lub usuwanie przystawek .
W lewym okienku programu MMC rozwiń węzeł Certyfikaty (Komputer lokalny).
Rozwiń węzeł Zaufane główne urzędy certyfikacji, kliknij prawym przyciskiem myszy podfolder Certyfikaty, wybierz pozycję Wszystkie zadania, a następnie wybierz polecenie Importuj.
W Kreatorze importowania certyfikatów na stronie Powitanie wybierz pozycję Dalej.
Na stronie Plik do importu wybierz pozycję Przeglądaj.
Przejdź do lokalizacji pliku certyfikatu caCert.cer , wybierz plik, a następnie wybierz pozycję Otwórz.
Na stronie Plik do importu wybierz pozycję Dalej.
Na stronie Magazyn certyfikatów zaakceptuj wybór domyślny, a następnie wybierz przycisk Dalej.
Na stronie Kończenie pracy Kreatora importu certyfikatów wybierz opcję Zakończ.
Opcja 2. Ufaj certyfikatowi serwera bez sprawdzania jego poprawności
W scenariuszach 1 i 2 ustaw ustawienie Certyfikat serwera zaufania w aplikacji klienckiej. To ustawienie powoduje, że połączenie jest szyfrowane, ale pomija walidację certyfikatu. Nazwa słowa kluczowego i akceptowane wartości zależą od biblioteki klienta:
| Biblioteka klienta | Słowo kluczowe parametry połączenia |
|---|---|
Microsoft.Data.SqlClient |
TrustServerCertificate=True |
| Sterownik ODBC firmy Microsoft dla programu SQL Server | TrustServerCertificate=yes |
| Microsoft OLE DB Driver for SQL Server (ciąg dostawcy) | TrustServerCertificate=yes |
Microsoft OLE DB Driver for SQL Server (ADO lub IDataInitialize) |
Trust Server Certificate=true |
| Sterownik JDBC firmy Microsoft dla programu SQL Server | trustServerCertificate=true |
Jeśli łączysz się przy użyciu programu SQL Server Management Studio (SSMS) 20 lub nowszej wersji, zaznacz pole wyboru Certyfikat serwera zaufania na stronie Logowania okna dialogowego Łączenie z serwerem. We wcześniejszych wersjach programu SSMS wybierz pozycję Opcje w oknie Łączenie z serwerem , wybierz kartę Właściwości połączenia , a następnie wybierz pozycję Certyfikat serwera zaufania.
Aby uzyskać więcej informacji na temat konfigurowania tego ustawienia dla biblioteki klienta, zobacz następujące artykuły:
- Szyfrowanie i walidacja certyfikatów w Microsoft. Data.SqlClient
- Szyfrowanie i walidacja certyfikatu w OLE DB Driver for SQL Server
- DSN, słowa kluczowe i atrybuty ciągu połączenia dla sterownika ODBC dla programu SQL Server
- Nawiązywanie połączenia z szyfrowaniem przy użyciu sterownika JDBC Microsoft dla SQL Server
- Używanie szyfrowania bez walidacji w SQL Server Native Client (starsza wersja klienta)
Uwaga
Ustawienie Certyfikat serwera zaufania nie powoduje wyłączenia szyfrowania. Połączenie pozostaje zaszyfrowane, ale klient nie weryfikuje tożsamości serwera.
Caution
Szyfrowane połączenia korzystające z certyfikatu z podpisem własnym nie zapewniają silnych zabezpieczeń. Są podatne na ataki typu man-in-the-middle. Nie należy polegać na protokole TLS z certyfikatami z podpisem własnym w środowisku produkcyjnym lub na serwerach połączonych z Internetem.
Opcja 3. Zmiana konfiguracji szyfrowania
Jeśli konfiguracja opisana w poprzednich sekcjach jest niezamierzona, skorzystaj z jednej z następujących opcji, aby rozwiązać ten problem:
Skonfiguruj Database Engine do używania certyfikatu z zaufanego urzędu. Ta opcja jest najbezpieczniejszą długoterminową poprawką, ponieważ klienci następnie weryfikują certyfikat bez dodatkowej konfiguracji. Aby uzyskać więcej informacji, zobacz Włączanie szyfrowanych połączeń z Mechanizmem bazy danych i Wymagania dotyczące certyfikatów dla programu SQL Server.
Jeśli szyfrowanie nie jest wymagane:
Wyłącz szyfrowanie w aplikacji klienckiej. Ustaw
Encrypt=Optionaldla parametru połączenia dostawcy OLE DB,Use Encryption for Data=Optionaldla OLE DB ADO lubIDataInitialize,Encrypt=nodla ODBC orazEncrypt=FalsedlaMicrosoft.Data.SqlClientlub sterownika Microsoft JDBC. W programie SSMS 20 lub nowszym ustaw opcję Szyfrowanie na wartość Opcjonalne na stronie Logowania okna dialogowego Łączenie z serwerem .Wyłącz szyfrowanie po stronie serwera przy użyciu SQL Server Configuration Manager. Rozwiń Konfiguracja sieci programu SQL Server, kliknij prawym przyciskiem myszy pozycję Protokoły dla <nazwy wystąpienia>, wybierz polecenie Właściwości, wybierz kartę Flagi, ustaw opcję Wymuś szyfrowanie na Nie, a następnie uruchom ponownie usługę SQL Server. Aby uzyskać więcej informacji, zobacz Protokoły dla właściwości MSSQLSERVER (karta Flagi).
Warning
Jeśli wyłączysz szyfrowanie, poświadczenia i dane są przesyłane przez sieć bez ochrony. Wyłącz szyfrowanie tylko w zaufanych, izolowanych sieciach.
Treści powiązane
- Niepowodzenie weryfikacji certyfikatu
- Rozwiązywanie problemów z błędami protokołu SSL (Secure Sockets Layer) występującymi podczas procesu logowania
- Omówienie zarządzania certyfikatami dla SQL Server
- Specjalne przypadki szyfrowania połączeń z SQL Server
- Szyfrowanie połączeń z programem SQL Server w systemie Linux