수동으로 Schannel 자격 증명 유효성 검사

기본적으로 Schannel은 WinVerifyTrust 함수를 호출하여 서버 인증서의 유효성을 검사합니다. 그러나 ISC_REQ_MANUAL_CRED_VALIDATION 플래그를 사용하여 이 기능을 사용하지 않도록 설정한 경우 해당 ID를 설정하려는 서버에서 제공하는 인증서의 유효성을 검사해야 합니다.

서버 인증서의 유효성을 수동으로 검사하려면 먼저 인증서를 가져와야 합니다. QueryContextAttributes(일반) 함수를 사용하고 SECPKG_ATTR_REMOTE_CERT_CONTEXT 특성 값을 지정합니다. 이 특성은 서버에서 제공하는 인증서 체인을 사용하여 CERT_CONTEXT 구조를 반환합니다. 이 인증서 체인에는 리프 인증서가 포함되어 있습니다. 리프 인증서는 인증서 체인의 마지막 인증서이며 루트 인증서에서 가장 멀리 떨어져 있기 때문에 리프 인증서라고 합니다. SSPI 컨텍스트 버퍼의 인증서 순서 지정이 인증서 연결 관계를 의미하지는 않습니다.

리프 인증서를 사용하여 다음을 확인해야 합니다.

  • 인증서 체인이 완료되었으며 루트는 신뢰할 수 있는 CA( 인증 기관 )의 인증서입니다.
  • 현재 시간은 인증서 체인의 각 인증서에 대한 시작 및 종료 날짜를 초과하지 않습니다.
  • 인증서 체인의 인증서가 해지되지 않았습니다.
  • 리프 인증서의 깊이는 인증서 확장에 지정된 최대 허용 깊이보다 깊지 않습니다. 이 검사 지정된 깊이가 있는 경우에만 필요합니다.
  • 인증서 사용법이 올바르습니다. 예를 들어 클라이언트 인증서 를 사용하여 서버를 인증하면 안 됩니다.
  • 서버 인증의 경우 서버의 리프 인증서에 포함된 서버 ID는 클라이언트가 연결하려는 서버와 일치합니다. 일반적으로 클라이언트는 인증서의 주체 이름 필드에 있는 일부 항목을 서버의 IP 주소 또는 DNS 이름과 일치합니다.