Błędy protokołu SSL są zgłaszane po uaktualnieniu do protokołu TLS 1.2
Ten artykuł zawiera informacje o błędach protokołu SSL (Secure Sockets Layer), które mogą wystąpić po uaktualnieniu do protokołu TLS 1.2 w programie SQL Server. Zawiera również listę metod, za pomocą których można pobrać dane ręcznie. Możesz również uruchomić narzędzie SQLCHECK i przejrzeć informacje w pliku dziennika SQLCHECK .
Symptomy
Rozważmy następujący scenariusz, w którym po uaktualnieniu protokołu TLS do protokołu TLS 1.2 mogą wystąpić następujące problemy.
Program Microsoft SQL Server używa certyfikatu podpisanego przez słaby algorytm skrótu. Takie certyfikaty obejmują MD5, SHA224 i SHA512.
Uaktualnienia protokołu TLS 1.2 zostały zastosowane tylko do klienta lub serwera, ale nie do obu.
Protokół TLS 1.0 jest wyłączony.
Nie ma pasujących algorytmów kryptograficznych między klientem a serwerem.
W tym scenariuszu po zakończeniu uaktualniania występują następujące problemy:
Problemy wpływające na certyfikat serwera mają również wpływ na połączenia lokalne i połączenia z komputerów klienckich. Aby uzyskać więcej informacji, zobacz Szyfrowanie połączeń z programem SQL Server.
Aplikacja może wygenerować jeden z następujących komunikatów o błędach:
Nazwane potoki
Połączenie z serwerem zostało pomyślnie nawiązane, ale wystąpił błąd podczas procesu logowania. (dostawca: Dostawca SSL, błąd: 0 — brak procesu na drugim końcu potoku) Microsoft SQL Server, błąd: 233.
TCP
Połączenie z serwerem zostało pomyślnie nawiązane, ale wystąpił błąd podczas procesu logowania. (dostawca: Dostawca SSL, błąd: 0 — połączenie zostało wymuszone przez hosta zdalnego 10054) Microsoft SQL Server, błąd: 233.
Jeśli masz przechwytywanie sieci, może to wyglądać podobnie do poniższego zrzutu ekranu pokazującego, że serwer odpowiada na Client Hello
pakiet, zamykając połączenie.
Rozwiązanie
Aby rozwiązać te problemy, wykonaj te kroki:
Otwórz menedżera konfiguracji programu SQL Server, kliknij prawym przyciskiem myszy pozycję Protokoły dla <wystąpieniaName>, a następnie wybierz polecenie Właściwości.
Wybierz kartę Certyfikat i sprawdź, który certyfikat jest używany.
Jeśli certyfikat istnieje, wybierz pozycję Widok , aby go zbadać, a następnie wybierz pozycję Wyczyść. Następnie przejdź do kroku 4.
Jeśli certyfikat nie istnieje, sprawdź plik dziennika błędów programu SQL Server, aby uzyskać kod skrótu. Może zostać wyświetlony jeden z następujących wpisów:
2023-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption.
lub2023-05-19 04:58:56.42 spid11s A self-generated certificate was successfully loaded for encryption.
Jeśli certyfikat jest generowany samodzielnie, przejdź do kroku 2.
Otwórz magazyn certyfikatów komputera w konsoli zarządzania firmy Microsoft (MMC).
Przejdź do pozycji Certyfikaty osobiste.
Rozwiń kolumnę Przeznaczenie i kliknij dwukrotnie certyfikaty, które są włączone do uwierzytelniania serwera.
Sprawdź, czy odcisk palca jest zgodny z odciskiem palca w pliku dziennika błędów. Jeśli tak nie jest, spróbuj użyć innego certyfikatu.
Sprawdź algorytm skrótu sygnatury. Jeśli jest to MD5, SHA224 lub SHA512, nie będzie obsługiwać protokołu TLS 1.2. Jeśli jest to jeden ze słabych algorytmów, wyłącz uwierzytelnianie serwera, aby program SQL Server nie mógł go używać.
Jeśli certyfikat jest jawnie określony w menedżerze konfiguracji programu SQL Server, wybierz pozycję Wyczyść , aby go usunąć.
Znajdź certyfikat w programie MMC.
W programie MMC kliknij prawym przyciskiem myszy certyfikat, a następnie wybierz polecenie Właściwości.
Na karcie Ogólne wyłącz certyfikat całkowicie lub selektywnie wyłącz uwierzytelnianie serwera.
Zapisz zmiany.
Uruchom ponownie program SQL Server.
Dziennik błędów powinien teraz wskazywać, że jest używany certyfikat wygenerowany samodzielnie. Jeśli problem zostanie rozwiązany, program SQL Server może zostać uruchomiony pomyślnie przy użyciu certyfikatu z podpisem własnym. Jeśli chcesz, aby verisign lub inny certyfikat, musisz poprosić dostawcę certyfikatu, aby upewnić się, że używany jest silny skrót odpowiedni dla protokołu TLS 1.2. Jeśli problem nie został rozwiązany, wróć do kroku 2.
Sprawdzanie włączonych i wyłączonych protokołów TLS
Aby sprawdzić włączone i wyłączone protokoły TLS, wykonaj następujące kroki:
Sprawdź przepływ pracy w tle i podstawowym uaktualnieniu, jeśli jeszcze tego nie zrobiono.
Aby wymusić protokół TLS 1.2, należy uaktualnić klienta i serwer. Jeśli jest to konieczne, możesz uaktualnić serwer, ale pozostawić włączony protokół TLS 1.0, aby klienci nie uaktualnioni mogli nawiązać połączenia.
Sprawdź rejestr SSL lub TLS przy użyciu regEDIT.
W podkluczu rejestru można znaleźć włączone i wyłączone wersje protokołu SSL lub TLS:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
Istnieją podklucze klienta i serwera dla każdej wersji protokołu SSL lub TLS oraz mają wartości Włączone i Wyłączone :
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
Uwaga 16.
Każda wartość niezerowa jest traktowana jako PRAWDA. Jednak 1 jest ogólnie preferowane zamiast FFFFFFFF (lub -1).
Upewnij się, że nie ma niezgodnych ustawień.
Na przykład protokół TLS 1.0 jest wyłączony, a protokół TLS 1.2 jest włączony na serwerze. Wynika to z faktu, że te ustawienia mogą nie być zgodne z ustawieniami klienta lub sterownik klienta może nie zostać zaktualizowany.
Tę sytuację można przetestować, ustawiając
Enabled=0
protokół TLS 1.2 (a także ponownie włącz protokół TLS 1.0, jeśli jest wyłączony).Uruchom ponownie program SQL Server, aby sprawdzić, czy problem jest związany z protokołem TLS 1.2, czy jest to ogólny problem.
Brak pasujących zestawów szyfrowania
W pakietach i Server Hello
można sprawdzić wersje protokołu TLS klienta i serwera oraz zestawy Client Hello
szyfrowania. Pakiet Client Hello
anonsuje wszystkie pakiety szyfrowania klienta, a Server Hello
pakiet określa jeden zestaw szyfrowania. Jeśli nie ma pasujących pakietów, serwer zamyka połączenie zamiast odpowiadać, wysyłając Server Hello
pakiet.
Jeśli ślad sieciowy jest niedostępny, możesz sprawdzić wartość funkcji w następującym podkluczu rejestru:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
Jeśli nie widzisz pasujących algorytmów, skontaktuj się z pomoc techniczna firmy Microsoft. Aby pomóc inżynierowi pomocy technicznej, przechwyć ślady sieci lub ślady bid zgodnie z opisem w sekcji Advanced SSL Data Capture.