1

個人証明書ストアに 2 つの x509Certificates がインストールされており、アプリケーション ポリシーによって証明書を取得したいと考えています。

これを実現するために次のコードを使用します。

public X509Certificate2 LocateCertificate(Oid oid)
{
    var store = new X509Store(Store.My, StoreLocation.CurrentUser);
    store.Open(OpenFlags.ReadOnly);

    try
    {
        var certificates = store.Certificates.Find(X509FindType.FindByApplicationPolicy, oid.Value, true);
        if(certificates.Count != 1)
        {
            throw new CryptographicException(string.Format("Expected one certificate, found {0}", certificates.Count);
        }
        return certificates[0];
    }
    finally
    {
        store.Close();
    }
}

インストールされた両方の X509Certificate が異なる拡張キーの使用法の値を持っている場合、有効な OID が提供されると、上記のメソッドは正しい証明書を正常に取得します。ただし、1 つの証明書に拡張キー使用法プロパティが設定されていない場合、その証明書も正しい証明書と共にクエリによって返されます。次のような証明書を返さないようにしたい:

  1. 誤った拡張キー使用法の値が設定されています。
  2. 拡張キー使用法の値が設定されていません。

どんな助けでも感謝します。

4

0 に答える 0