Udostępnij za pośrednictwem


Opis mechanizmu wykrywania proxy przez API kryptografii podczas pobierania listy unieważnień certyfikatów (CRL) z punktu dystrybucji CRL

Ostrzeżenie

Wycofana, nieobsługiwana aplikacja klasyczna Internet Explorer 11 ma zostać trwale wyłączona za pośrednictwem aktualizacji aplikacji Microsoft Edge dla niektórych wersji systemu Windows 10. Aby uzyskać więcej informacji, zobacz artykuł pt. Często zadawane pytania dotyczące wycofywania aplikacji klasycznej Internet Explorer 11.

Celem tego artykułu jest wyjaśnienie, jak interfejs API Crypto próbuje znaleźć trasę, za pomocą której można pomyślnie pobrać adres URL punktu dystrybucji CRL opartego na protokole HTTP. Artykuł ma na celu pomoc w rozwiązywaniu problemów związanych z pobieraniem list CRL w sieci.

Oryginalna wersja produktu: Windows Server 2003 z dodatkiem Service Pack 2, Windows Vista Enterprise, Windows Server 2008 Enterprise, Windows 7 Enterprise, Windows Server 2008 R2 Enterprise, Windows 10, Windows Server 2016, Windows Server 2019
Oryginalny numer KB: 2623724

Podsumowanie

Rozważmy następujący scenariusz. Aplikacja używa interfejsu API WinINet, interfejsu API WinHTTP lub klasy System.Net.HttpWebRequest platformy .NET, aby wysłać żądanie HTTP za pośrednictwem protokołu SSL/TLS. Podczas negocjacji bezpiecznego kanału SSL/TLS serwer wysyła z powrotem komunikat Hello serwera do klienta przy użyciu certyfikatu serwera w celu potwierdzenia tożsamości klienta. W ten sposób informacje o certyfikacie serwera mogą również zawierać listę punktów dystrybucji listy odwołania certyfikatów (CRL). Lista punktów dystrybucji listy CRL zawiera adres URL, z którego klient może pobrać listę CRL i sprawdzić, czy certyfikat serwera został odwołany przez wydawcę certyfikatu.

Interfejs API kryptograficzny wewnętrznie wykorzystuje interfejs API WinHTTP do pobrania adresu URL opartego na protokole HTTP dla punktu dystrybucji listy CRL. Przed pobraniem adresu URL WinHTTP musi znać trasę, aby uzyskać dostęp do CRL URL. W sytuacjach, gdy środowisko ma serwer proxy, WinHTTP może automatycznie wykryć serwer proxy lub na żądanie aplikacji korzystającej z interfejsu API WinHTTP użyć określonego serwera proxy do pobrania CRL.

API kryptografii najpierw próbuje znaleźć serwer proxy, korzystając z poniższej logiki, a jeśli znajdzie adres serwera proxy, prosi WinHTTP o użycie tego konkretnego wystąpienia serwera proxy.

Jeśli wystąpienie serwera proxy nie jest osiągalne lub jest nieprawidłowe, usługa WinHTTP nie będzie mogła pobrać listy odwołanych certyfikatów (CRL), weryfikacja odwołania certyfikatu zakończy się niepowodzeniem, a aplikacja otrzyma błąd od interfejsu Crypto API wskazujący na niepowodzenie weryfikacji odwołania. Może zgłosić ten sam błąd użytkownikowi, a w zależności od implementacji ustanowienie bezpiecznego kanału może zakończyć się niepowodzeniem.

Podczas próby odnalezienia serwera proxy interfejs API kryptograficzny używa następującej logiki:

  1. Sprawdza, czy na maszynie, z której jest wykonywane sprawdzanie listy CRL, są skonfigurowane jakiekolwiek ustawienia statycznego serwera proxy. Zazwyczaj ta konfiguracja jest wykonywana przy użyciu narzędzia netsh do ręcznego ustawiania serwera proxy w systemie Windows Vista, Windows 2008, Windows 7 lub Windows 2008 R2. Jeśli zostanie znaleziony statyczny serwer proxy, Crypto API używa znalezionego statycznie serwera proxy do pobrania listy unieważnionych certyfikatów (CRL) za pośrednictwem usługi WinHttp. Aby uzyskać więcej informacji na temat protokołu netsh, zobacz Netsh Commands for Windows Hypertext Transfer Protocol (WINHTTP) w sekcji Więcej informacji poniżej.

    Uwaga

    Ta kontrola jest wykonywana tylko w systemach Windows Vista, Windows 2008, Windows 7 i Windows 2008 R2. W systemie Windows 2003 interfejs API kryptograficzny nie sprawdza ustawień statycznego serwera proxy.

  2. Jeśli statycznie skonfigurowany serwer proxy nie zostanie znaleziony, Crypto API spróbuje pobrać ustawienia proxy dla programu Internet Explorer w kontekście użytkownika, pod którym jest uruchamiany.

    W zależności od tego, jako co jest uruchomiony proces, może to być tożsamość aktualnie zalogowanego użytkownika, lub może to być dowolny określony użytkownik, albo którymkolwiek z kont systemowych — SYSTEM LOKALNY, USŁUGA SIECIOWA, USŁUGA LOKALNA. Następujące lokalizacje rejestru są odpytywane na podstawie wykonywanej tożsamości:

    • Aktualnie zalogowany użytkownik: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    • USŁUGA SIECIOWA: HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    • SYSTEM LOKALNY: HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    • USŁUGA LOKALNA: HKEY_USERS\S-1-5-19\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    • Dowolny inny użytkownik: HKEY_USERS\<<SID of that user>>\Software\Microsoft\Windows\CurrentVersion\Internet Settings

    W zależności od informacji o rejestrze zostaną zwrócone ustawienia serwera proxy dla tego użytkownika. Jeśli ustawienia serwera proxy są nieobecne, nie zostaną zwrócone żadne informacje. Jeśli ustawienia serwera proxy zostaną zwrócone, mogą zawierać kombinację poniższych opcji:

    • Automatycznie wykrywaj ustawienia.
    • Użyj skryptu automatycznej konfiguracji.
    • Serwer proxy.

    Uwaga

    W sytuacjach, gdy proces jest uruchomiony jako inna tożsamość niż aktualnie zalogowany użytkownik, może wystąpić niespójność w ustawieniach serwera proxy w zależności od tego, jak ustawienia serwera proxy zostały skonfigurowane dla tego użytkownika. W takich przypadkach można zauważyć, że przechodzenie do lokalizacji listy CRL przy użyciu programu Internet Explorer jako bieżący użytkownik pomyślnie pobiera listę CRL, ale ten sam proces kończy się niepowodzeniem w przypadku użycia z interfejsu API kryptograficznego, który jest wykonywany jako inny użytkownik. W takich sytuacjach zdecydowanie zaleca się sprawdzenie ustawień internetowych wszystkich użytkowników i upewnienie się, że są one spójne.

    Ustawienia internetowe nie powinny być obecne dla żadnych użytkowników nieinterakcyjnych, takich jak USŁUGA SIECIOWA, SYSTEM LOKALNY lub USŁUGA LOKALNA, ponieważ nigdy nie będzie trzeba otwierać programu Internet Explorer z tymi tożsamościami. W takich przypadkach musisz upewnić się, że ci użytkownicy nieinterakcyjni nie mają skonfigurowanych żadnych ustawień serwera proxy dla programu Internet Explorer, lub że są one zgodne z ustawieniami serwera proxy dla użytkownika, z którym pobieranie listy CRL zakończy się pomyślnie przy użyciu programu Internet Explorer.

  3. Jeśli ustawienia serwera proxy programu Internet Explorer nie są obecne dla aktualnego użytkownika lub jeśli ustawienia programu Internet Explorer dla tożsamości procesu wskazują. Automatycznie wykrywaj ustawienia lub Użyj skryptu automatycznej konfiguracji, interfejs API kryptografii spróbuje automatycznie odnaleźć serwer proxy dla danej CRL (Listy Unieważnionych Certyfikatów). Spowoduje to zwrócenie określonych informacji o serwerze proxy lub zwrócenie wartości "brak serwera proxy", jeśli automatyczne odnajdywanie serwera proxy nie powiedzie się lub jeśli adres URL nie wymaga serwera proxy.

    API kryptograficzne spróbuje użyć API WinHTTP do pobrania CRL URL przy użyciu wykrytego serwera proxy (lub żadnego serwera proxy, jeśli nie można wykryć serwera proxy lub jeśli URL nie wymaga serwera proxy).

    Jeśli serwer proxy jest niemożliwy do osiągnięcia lub jeśli informacje o serwerze proxy są nieprawidłowe, pobieranie adresu URL listy CRL zakończy się niepowodzeniem. Następnie interfejs API kryptograficzny zgłosi ten błąd do wywołującego interfejsu API, a w zależności od implementacji obiekt wywołujący interfejs API kryptograficznego może zdecydować, czy przerwać żądanie, czy zezwolić na nie.

    Uwaga

    W przypadkach, gdy sama aplikacja korzysta z interfejsu API WinHTTP i ustawiła informacje o serwerze proxy w wywołaniu WinHttpOpen lub WinHttpSetOption, API kryptograficzne nie ma dostępu do tych informacji o serwerze proxy i nadal próbuje je odnaleźć zgodnie z opisanym wcześniej sposobem. Użycie interfejsu API WinHttp z API kryptograficznego i z własnej aplikacji jest niezależne i nie udostępniają żadnych informacji.

W systemie Windows 10 zaktualizowano interfejs CryptoAPI 2 (CAPI2), aby nie miał własnych ustawień serwera proxy. Zmiana jest wprowadzana w wywołaniu funkcji WinHttpOpen, gdzie od systemu Windows 10 CAPI2 używa flagi WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY.

Nazwa flagi opis
WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY Używa ustawień systemowych i serwerów proxy dla poszczególnych użytkowników (w tym konfiguracji serwera proxy programu Internet Explorer), aby określić, które serwery proxy/serwery proxy mają być używane. Automatycznie próbuje obsłużyć przełączenie awaryjne między wieloma serwerami proxy, różne konfiguracje serwera proxy dla każdego interfejsu oraz uwierzytelnianie. Obsługiwane w systemach Windows 8.1 i nowszych.

Uwaga

Poprzednie wersje systemu Windows używały flagi WINHTTP_ACCESS_TYPE_DEFAULT_PROXY .

Flaga WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY oznacza, że usługa WinHttp będzie obsługiwać logikę wykrywania serwera proxy, a obiekt wywołujący nie powinien pisać żadnego kodu do obsługi konfiguracji serwera proxy. Jeśli ustawiono flagę WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY , winHttp sprawdzi domyślną konfigurację serwera proxy przy użyciu narzędzia netsh, a następnie ustawienia serwera proxy programu Internet Explorer.

Uwaga

Ustawienia serwera proxy Internet Explorer są przypisane do każdego użytkownika, co oznacza, że obiekt wywołujący powinien przyjąć tożsamość zalogowanego użytkownika.

Jeśli nie chcesz ustawiać serwera proxy dla każdego zalogowanego użytkownika, możesz skonfigurować serwer proxy dla całego komputera, ustawiając klucz ProxySettingsPerUser na 0.

Klucz rejestru HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\InternetSettings\ProxySettingsPerUser
Typ REG DWORD
Wartość
0: serwer proxy dla maszyny
1 lub brak wartości: na użytkownika

Po ustawieniu klucza rejestru można skonfigurować serwer proxy za pomocą właściwości internetowych (Inetcpl.cpl). Ustawienia serwera proxy dla całej maszyny można zmienić przez administratorów lub za pomocą zasad grupy.

Więcej informacji

Aby uzyskać więcej informacji, zobacz: