Rozwiązywanie problemów związanych z protokołem SSL (certyfikat serwera)
Dotyczy: Internet Information Services
Omówienie
Ten artykuł ułatwia rozwiązywanie problemów z protokołem SSL (Secure Sockets Layer) związanych tylko z usługami Internet Information Services (IIS). Obejmuje certyfikaty serwera używane do uwierzytelniania serwera, a nie certyfikaty klienta.
Jeśli w sekcji Certyfikaty klienta ustawiono wartość Wymagaj i występują problemy, ten artykuł nie jest tym, który należy odwołać. Ten artykuł jest przeznaczony do rozwiązywania problemów tylko z certyfikatami serwera SSL.
Ważne jest, aby wiedzieć, że każdy certyfikat składa się z klucza publicznego (używanego do szyfrowania) i klucza prywatnego (używanego do odszyfrowywania). Klucz prywatny jest znany tylko serwerowi.
Domyślny port protokołu HTTPS to 443. Zakłada się, że dobrze znasz uzgadnianie protokołu SSL i proces uwierzytelniania serwera podczas uzgadniania PROTOKOŁU SSL.
Narzędzia używane w tym narzędziu do rozwiązywania problemów
Narzędzia używane do rozwiązywania problemów z różnymi scenariuszami to:
- Monitor sieci 3.4
- Wireshark
Scenariusze
Podczas przeglądania witryny internetowej za pośrednictwem protokołu HTTPS jest wyświetlany następujący komunikat o błędzie:
Pierwszym wymaganiem wstępnym, które należy sprawdzić, jest to, czy witryna internetowa jest dostępna za pośrednictwem protokołu HTTP. Jeśli tak nie jest, prawdopodobnie istnieje osobny problem, który nie został omówiony w tym artykule. Przed użyciem tego narzędzia do rozwiązywania problemów musisz mieć działającą witrynę internetową w protokole HTTP.
Teraz załóżmy, że witryna internetowa jest dostępna za pośrednictwem protokołu HTTP, a poprzedni komunikat o błędzie jest wyświetlany podczas próby przeglądania za pośrednictwem protokołu HTTPS. Komunikat o błędzie jest wyświetlany, ponieważ uzgadnianie SSL nie powiodło się. Może istnieć wiele powodów, które zostały szczegółowo opisane w kilku następnych scenariuszach.
Scenariusz 1
Sprawdź, czy certyfikat serwera ma odpowiadający mu klucz prywatny. Zobacz następujący zrzut ekranu okna dialogowego Certyfikat:
Rozwiązanie
Jeśli brakuje klucza prywatnego, musisz uzyskać certyfikat zawierający klucz prywatny, który jest zasadniczo kluczem . Plik PFX . Oto polecenie, które można uruchomić w celu skojarzenia klucza prywatnego z certyfikatem:
C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"
Jeśli skojarzenie zakończy się pomyślnie, zostanie wyświetlone następujące okno:
W tym przykładzie 906c9825e56a13f1017ea40eca770df4c24cb735
jest odciskiem palca certyfikatu. Aby uzyskać odcisk palca, wykonaj następujące kroki:
- Otwórz certyfikat.
- Wybierz kartę Szczegóły.
- Przewiń w dół, aby znaleźć sekcję odcisku palca.
- Wybierz sekcję odcisku palca i wybierz pod nim tekst.
- Wykonaj Ctrl+A, a następnie naciśnij Ctrl+C, aby go zaznaczyć i skopiować.
Uwaga 16.
Polecenie certutil
może nie zawsze zakończyć się powodzeniem. Jeśli to się nie powiedzie, musisz uzyskać certyfikat zawierający klucz prywatny z urzędu certyfikacji (CA).
Scenariusz 2
W tym scenariuszu należy wziąć pod uwagę, że masz certyfikat serwera zawierający klucz prywatny zainstalowany w witrynie internetowej. Jednak nadal widzisz błąd wyświetlany w scenariuszu 1. Nadal nie można uzyskać dostępu do witryny internetowej za pośrednictwem protokołu HTTPS.
Rozwiązanie
Jeśli masz certyfikat zawierający klucz prywatny, ale nie możesz uzyskać dostępu do witryny internetowej, w dziennikach zdarzeń systemu może zostać wyświetlone również następujące ostrzeżenie SChannel:
Event Type: Error
Event Source: Schannel
Event Category: None
Event ID: 36870
Date: 2/11/2012
Time: 12:44:55 AM
User: N/A
Computer:
Description: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x80090016.
To zdarzenie lub błąd wskazuje, że wystąpił problem podczas uzyskiwania klucza prywatnego certyfikatu. Aby rozwiązać ten problem, wykonaj następujące kroki:
Sprawdź uprawnienia w folderze MachineKeys . Wszystkie klucze prywatne są przechowywane w folderze MachineKeys , dlatego upewnij się, że masz niezbędne uprawnienia.
Jeśli uprawnienia są spełnione i jeśli problem nadal nie został rozwiązany, może wystąpić problem z certyfikatem. Mogło to być uszkodzone. Kod błędu
0x8009001a
może zostać wyświetlony w następującym dzienniku zdarzeń SChannel:Event Type: Error Event Source: Schannel Event Category: None Event ID: 36870 Date: 2/11/2012 Time: 12:44:55 AM User: N/A Computer: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009001a.
Sprawdź, czy witryna internetowa współpracuje z certyfikatem testowym.
Utwórz kopię zapasową istniejącego certyfikatu, a następnie zastąp go certyfikatem z podpisem własnym.
Spróbuj uzyskać dostęp do witryny internetowej przy użyciu protokołu HTTPS.
Jeśli działa, używany wcześniej certyfikat został uszkodzony i musi zostać zastąpiony nowym certyfikatem roboczym. Czasami problem może nie dotyczyć certyfikatu, ale wystawcy. Podczas weryfikacji łańcucha certyfikatów może zostać wyświetlony błąd
CERT_E_UNTRUSTEDROOT (0x800b0109)
, jeśli certyfikat głównego urzędu certyfikacji nie jest zaufanym katalogiem głównym.Aby naprawić ten błąd, dodaj certyfikat urzędu certyfikacji do magazynu zaufanego głównego urzędu certyfikacji w obszarze Moje konto komputera na serwerze. Podczas weryfikacji łańcucha certyfikatów może również zostać wyświetlony błąd
-2146762480(0x800b0110)
.Aby rozwiązać ten problem, wykonaj następujące kroki, aby sprawdzić typ użycia certyfikatu:
- Otwórz certyfikat.
- Wybierz kartę Szczegóły.
- Wybierz pozycję Edytuj właściwości.
- Na karcie Ogólne upewnij się, że jest wybrana opcja Włącz wszystkie cele dla tego certyfikatu , a co najważniejsze, na liście powinna znajdować się pozycja Uwierzytelnianie serwera.
Scenariusz 3
Dwa pierwsze scenariusze pomagają sprawdzić integralność certyfikatu. Po potwierdzeniu, że nie ma problemów z certyfikatem, zostanie rozwiązany problem o rozmiarze. Ale co zrobić, jeśli witryna internetowa nadal nie jest dostępna za pośrednictwem protokołu HTTPS? Sprawdź powiązania HTTPS witryny internetowej i określ, na którym porcie i adresie IP nasłuchuje.
Rozwiązanie
Uruchom następujące polecenie, aby upewnić się, że żaden inny proces nie nasłuchuje na porcie SSL używanym przez witrynę internetową.
netstat -ano" or "netstat -anob"
Jeśli na tym porcie nasłuchuje inny proces, sprawdź, dlaczego ten proces korzysta z tego portu.
Spróbuj zmienić kombinację portów IP, aby sprawdzić, czy witryna internetowa jest dostępna.
Scenariusz 4
Do tej pory możesz mieć pewność, że masz zainstalowany odpowiedni certyfikat roboczy w witrynie internetowej i nie ma innego procesu przy użyciu portu SSL dla tej witryny internetowej. Jednak podczas uzyskiwania dostępu do witryny internetowej za pośrednictwem protokołu HTTPS nadal może zostać wyświetlony błąd "Nie można wyświetlić strony". Gdy klient łączy się i inicjuje negocjacje SSL, HTTP.sys wyszukuje konfigurację protokołu SSL dla pary "IP:Port", z którą jest połączony klient. Konfiguracja protokołu SSL HTTP.sys musi zawierać skrót certyfikatu, a nazwa magazynu certyfikatów przed pomyślnym zakończeniem negocjacji PROTOKOŁU SSL. Problem może dotyczyć polecenia HTTP.SYS SSL Listener
.
Skrót certyfikatu zarejestrowany w HTTP.sys może mieć wartość NULL lub może zawierać nieprawidłowy identyfikator GUID.
Rozwiązanie
Wykonaj następujące polecenie:
netsh http show ssl
Oto przykłady działających i niedziałanych scenariuszy:
Scenariusz roboczy
Konfigurowanie Ustawienie IP:port 0.0.0.0:443 Skrót certyfikatu c09b416d6b 8d615db22 64079d15638e96823d Application ID {4dc3e181-e14b-4a21-b022-59fc669b0914} Nazwa magazynu certyfikatów Moje Weryfikowanie odwołania certyfikatów klienta Włączona Czas odświeżenia odwołania 0 Limit czasu pobierania adresu URL 0 ...... ...... Niedziałajny scenariusz
Konfigurowanie Ustawienie IP:port 0.0.0.0:443 Skrót certyfikatu Application ID {00000000-0000-0000-0000-000000000000} Nazwa magazynu certyfikatów Moje Weryfikowanie odwołania certyfikatów klienta 0 Czas odświeżenia odwołania 0 Limit czasu pobierania adresu URL 0 ...... ...... Wartość skrótu widoczna w scenariuszu roboczym to odcisk palca certyfikatu SSL. Zwróć uwagę, że identyfikator GUID jest zerowy w scenariuszu, który nie działa. Może zostać wyświetlony skrót z jedną wartością lub jest pusty. Nawet jeśli usuniesz certyfikat z witryny internetowej, a następnie uruchomisz
netsh http show ssl
polecenie , witryna internetowa nadal wyświetli identyfikator GUID jako wszystkie 0s. Jeśli identyfikator GUID jest wyświetlany jako "{0000...............000}", wystąpił problem.Usuń ten wpis, uruchamiając następujące polecenie:
netsh http delete sslcert ipport=<IP Address>:<Port>
Na przykład:
netsh http delete sslcert ipport=0.0.0.0:443
Aby określić, czy są wyświetlane jakiekolwiek adresy IP, otwórz wiersz polecenia, a następnie uruchom następujące polecenie:
netsh http show iplisten
Jeśli polecenie zwraca listę adresów IP, usuń każdy adres IP na liście przy użyciu następującego polecenia:
netsh http delete iplisten ipaddress=<IP Address>
Uwaga 16.
Uruchom ponownie usługi IIS po wykonaniu
net stop http /y
tego polecenia.
Scenariusz 5
Pomimo tego wszystkiego, jeśli nadal nie możesz przeglądać witryny internetowej przy użyciu protokołu HTTPS, przechwyć ślad sieciowy z klienta lub serwera. Przefiltruj ślad według wartości "SSL lub TLS", aby przyjrzeć się ruchowi SSL.
Oto migawka śledzenia sieci scenariusza, który nie działa:
Oto migawka śledzenia sieci scenariusza roboczego:
Jest to metoda przeglądania śledzenia sieci. Należy rozwinąć szczegóły ramki i zobaczyć, jaki protokół i szyfr został wybrany przez serwer. Wybierz pozycję "Witaj serwer" z opisu, aby wyświetlić te szczegóły.
W scenariuszu, który nie działa, klient został skonfigurowany do używania tylko protokołów TLS 1.1 i TLS 1.2. Jednak serwer sieci Web usług IIS został skonfigurowany do obsługi do czasu protokołu TLS 1.0, więc uzgadnianie nie powiodło się.
Sprawdź klucze rejestru, aby określić, które protokoły są włączone lub wyłączone. Oto ścieżka:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
Włączona wartość DWORD powinna być ustawiona na 1. Jeśli jest ustawiona wartość 0, protokół jest wyłączony.
Na przykład protokół SSL 2.0 jest domyślnie wyłączony.