Schannel 資格情報の手動検証
既定では、Schannel は WinVerifyTrust 関数を呼び出してサーバー証明書を検証します。ただし、ISC_REQ_MANUAL_CRED_VALIDATION フラグを使用してこの機能を無効にした場合は、その ID を確立しようとしているサーバーによって提供される証明書を検証する必要があります。
サーバー証明書を手動で検証するには、最初に取得する必要があります。 QueryContextAttributes (General) 関数を使用し、SECPKG_ATTR_REMOTE_CERT_CONTEXT属性値を指定します。 この属性は、サーバーによって提供される証明書チェーンを含む CERT_CONTEXT 構造体を返します。 この証明書チェーンにはリーフ証明書が含まれています。 リーフ証明書は、証明書チェーンの最後の証明書であり、 ルート証明書から最も離れているため、リーフ証明書と呼ばれます。 SSPI コンテキスト バッファーでの証明書の順序付けは、証明書チェーン関係を意味するものではありません。
リーフ証明書を使用して、次のことを確認する必要があります。
- 証明書チェーンが完了し、ルートは信頼された証明機関 (CA) からの 証明書 です。
- 現在の時刻は、証明書チェーン内の各証明書の開始日と終了日を超えていません。
- 証明書チェーン内の証明書が失効していない。
- リーフ証明書の深さは、証明書拡張機能で指定された最大許容深度より深くはありません。 このチェックは、深さが指定されている場合にのみ必要です。
- 証明書の使用方法は正しいです。たとえば、 クライアント証明書 を使用してサーバーを認証しないでください。
- サーバー認証の場合、サーバーのリーフ証明書に含まれるサーバー ID は、クライアントが接続しようとしているサーバーと一致します。 通常、クライアントは証明書の [サブジェクト名] フィールドの一部の項目をサーバーの IP アドレスまたは DNS 名と照合します。