2

からすべてのクライアント認証証明書を検索したいX509Store(StoreLocation.CurrentUser)

とにかくこれを行うことはありますか?すべてを取得してから、特定のプロパティでフィルタリングして、すべてのクライアント認証証明書を取得しても?

4

2 に答える 2

2

クライアント証明書として使用できるものを識別するのに役立つ拡張機能があります。

  • Extended Key Usage extension。存在する場合はこれになりますid-kp-clientAuth
  • 「レガシー」Netscape Cert Type 拡張機能 (厳密には標準ではありませんが、Netscape/Mozilla ツールの世界以外でも広く採用されています)。

これらの拡張機能をまったく持たない証明書も、(拡張されていない) Key Usage 拡張機能(存在する場合)と互換性がある場合、クライアント証明書として使用できます。(拡張されていない) Key Usage 拡張機能で少なくとも必要なのはdigitalSignature、クライアント証明書用です。Netscape Cert Type と Extended Key Usage 拡張機能の両方を取得した場合に何が起こるかは明確ではありませんが、RFC 5280 の精神に則り、存在するすべての拡張機能と互換性のある目的で使用することを検討する価値があります。

証明書にキー使用拡張と拡張キー使用拡張の両方が含まれている場合、両方の拡張を個別に処理する必要があり、証明書は両方の拡張と一致する目的にのみ使用する必要があります。両方の拡張機能と一致する目的がない場合、証明書をいかなる目的にも使用してはなりません (MUST NOT)。

NSS テクニカル ノート 3 (証明書の拡張に関するすべて)に関心があるはずです。

于 2010-09-23T14:36:18.720 に答える
1

各証明書の拡張機能を調べる必要があります。私が見る限り、キー使用法拡張機能に到達すると、必要なすべての情報が得られるはずです。

編集実際には、クライアント認証には、拡張キー使用法拡張が必要になる可能性があります。これをテストするために横たわっているクライアント認証証明書はありませんが、次の例では、取得したサーバー証明書の「サーバー認証」が出力されます。

        var cert1 = new X509Certificate2(/* Path to certificate */);
        foreach (var ext in cert1.Extensions)
        {
            var eku = ext as X509EnhancedKeyUsageExtension;
            if (eku != null)
            {
                foreach (var oid in eku.EnhancedKeyUsages)
                {
                    Console.WriteLine(oid.FriendlyName);
                }
            }
        }
于 2010-09-22T08:38:04.423 に答える