Udostępnij przez


Ręczne weryfikowanie poświadczeń Schannel

Domyślnie usługa Schannel weryfikujecertyfikat serweraprzez wywołanie funkcji WinVerifyTrust; Jeśli jednak ta funkcja została wyłączona przy użyciu flagi ISC_REQ_MANUAL_CRED_VALIDATION, należy zweryfikować certyfikat dostarczony przez serwer, który próbuje ustanowić jego tożsamość.

Aby ręcznie zweryfikować certyfikat serwera, należy go najpierw pobrać. Użyj funkcji QueryContextAttributes (Ogólne) i określ wartość atrybutu SECPKG_ATTR_REMOTE_CERT_CONTEXT. Ten atrybut zwraca strukturę CERT_CONTEXT z łańcuchem certyfikatów dostarczonym przez serwer. Ten łańcuch certyfikatów zawiera certyfikat liścia. Jest on nazywany certyfikatem liścia, ponieważ jest to ostatni certyfikat w łańcuchu certyfikatów i znajduje się najdalej od certyfikatu głównego . Kolejność certyfikatów w buforze kontekstu SSPI nie oznacza żadnej relacji tworzenia łańcucha certyfikatów.

Korzystając z certyfikatu liścia, należy sprawdzić następujące kwestie:

  • Łańcuch certyfikatów jest kompletny, a korzeń to certyfikat z zaufanego urzędu certyfikacji (CA).
  • Bieżący czas nie przekracza dat rozpoczęcia i zakończenia dla każdego certyfikatu w łańcuchu certyfikatów.
  • Żaden z certyfikatów w łańcuchu certyfikatów nie został odwołany.
  • Głębokość certyfikatu liścia nie jest głębsza niż maksymalna dozwolona głębokość określona w rozszerzeniu certyfikatu. To sprawdzenie jest konieczne tylko wtedy, gdy określona jest głębokość.
  • Użycie certyfikatu jest poprawne, na przykład certyfikat klienta nie powinien być używany do uwierzytelniania serwera.
  • W przypadku uwierzytelniania serwera tożsamość serwera zawarta w certyfikacie liści serwera jest zgodna z serwerem, z którego klient próbuje się skontaktować. Klient zazwyczaj dopasowuje jakiś element z pola Nazwa podmiotu certyfikatu do adresu IP serwera lub nazwy DNS.