3

ユーザーの認証にスマート カードを使用しています。サーバーで認証ロジックを処理する認証サービス (SecurityTokenService) があります。

X509Certificate2.Verify()を使用して証明書を検証しています。この API は、オンラインに接続して認証局 (CA) に連絡することで、証明書が有効か失効しているかを確認できるため、サーバーにルート証明書が必要ですか?

ローカル コンピューターにルート証明書を持たないようにすることはできますか? または、ルート証明書は常に必須ですか?

4

1 に答える 1

5

私はいくつかのことを試しましたが、ここに観察結果があります:

  1. まずX509Certificate2.Verify()、チェーン内のすべての証明書が取り消されているかどうかを確認しません。この投稿から 、Verify メソッドが内部的にCrypt32 CertVerifyCertificateChainPolicy関数を使用していることを知りました。そのドキュメントには、証明書失効チェックを実行しないと記載されています。つまり、Verify メソッドは、呼び出された証明書が取り消されているかどうかを確認するだけです。

  2. ルート証明書について:

    • を使用していてX509Certificate2.Verify()、ルート証明書が存在しない場合、メソッドは完全に を返しfalseます。したがって、この方法ではルート証明書が絶対に必要です。
    • X509Chainを使用して信頼チェーンを構築している場合は、ルート証明書の失効を除外するか、オンライン/オフラインにして証明書の失効ステータスを確認するかを決定できます。
    • ただし、オンラインにするかどうか、またはルート証明書を除外するかどうかに関係なく、ルート証明書が見つからない場合は、 ChainStatusでPartialChain値を取得します。したがって、完全な信頼チェーンを構築するには、マシンにルート証明書が必要です。

これが、C# での証明書の検証についてもう少し知りたい人に役立つことを願っています。

于 2012-04-11T09:00:13.900 に答える