Udostępnij przez


Tworzenie kontekstu zabezpieczeń Schannel

Aby ustanowić kontekst zabezpieczeń, który będzie chronić komunikację między klientem a serwerem, oba muszą uczestniczyć w następującym procesie wymiany informacji:

Klient

  1. Klient wywołuje funkcję InitializeSecurityContext (General) .
  2. Schannel rozpoczyna tworzenie kontekstu zabezpieczeń zgodnie z regułami wybranego protokołu zabezpieczeń. Kod zwrotny funkcji wskazuje, czy klient musi wywołać funkcję ponownie. InitializeSecurityContext (General) może zwrócić token reprezentujący kontekst.
  3. Jeśli token został zwrócony, klient wysyła go do serwera.
  4. Gdy InitializeSecurityContext (ogólne) zwraca SEC_E_OK, klient zakończył swoje działanie. Jeśli funkcja zwróci SEC_I_CONTINUE_NEEDED, klient musi poczekać, aż serwer wyśle do niego token. Gdy klient otrzyma token z serwera, musi ponownie wywołać funkcję InitializeSecurityContext (Ogólne). (Wróć do kroku 2).

Serwer

  1. Serwer czeka, aż klient wyśle komunikat zawierający token zabezpieczający. Serwer przekazuje token otrzymany od klienta do funkcji AcceptSecurityContext (Ogólne).
  2. Schannel opiera się na częściowym kontekście zabezpieczeń reprezentowanym przez token. Schannel zwraca token do serwera i kod zwrotny wskazujący, czy serwer musi wywołać funkcję ponownie.
  3. Jeśli token został zwrócony, serwer wysyła go do klienta.
  4. Gdy AcceptSecurityContext (ogólne) zwraca SEC_E_OK, serwer zakończył działanie. Jeśli funkcja zwróci SEC_I_CONTINUE_NEEDED, serwer musi poczekać, aż klient wyśle do niego token. Kiedy serwer ma token od klienta, musi ponownie wywołać funkcję AcceptSecurityContext (Ogólne). (Wróć do kroku 2).

Jeśli którakolwiek z funkcji zwraca wartość inną niż SEC_E_OK, SEC_I_CONTINUE_NEEDED lub SEC_E_INCOMPLETE_MESSAGE (zobacz następujący akapit), wystąpił błąd. Klient i serwer powinny wywołać funkcję DeleteSecurityContext, aby usunąć częściowo ustalony kontekst zabezpieczeń.

Specjalny przypadek, który może zmienić przetwarzanie klienta i serwera, jest wtedy, gdy zbyt mało lub zbyt wiele informacji jest wysyłanych do klienta lub serwera od innej firmy. W przypadku zbyt małej ilości informacji obie funkcje zwracają SEC_E_INCOMPLETE_MESSAGE. Aby uzyskać informacje na temat rozpoznawania i obsługi niewystarczających lub nadmiarowych informacji, zobacz Dodatkowe bufory zwrócone przez Schannel.

Uwierzytelnianie przy użyciu Schannel

Certyfikaty mapowania

ręczne weryfikowanie poświadczeń Schannel