次のように、バイト配列から X509 証明書をロードするコンソール アプリケーションがあります。
var cert = new X509Certificate2(certificateContent, // byte[]
password, // string
X509KeyStorageFlags.PersistKeySet);
certificateContent
pfx ファイルの内容をbyte[]
表す です。このコードは、私がテストした多くの証明書で問題なく動作します。ただし、私がテストしている証明書が 1 つあります。これにより、CryptographicException
指定されたパスワードが正しい場合でも、この行で「指定されたネットワーク パスワードが正しくありません。」というメッセージがスローされます。
奇妙な部分は、LinqPad で同じコードを使用して、同じパスワードで同じ pfx ファイルから証明書を作成できることです。
デバッガーのコンソール アプリケーションで呼び出しサイトを確認し、正しい値が渡されていることを確認しました。
このコンストラクターが、同じデータを使用する LinqPad ではなく、コンソール アプリでこの例外をスローし、他の証明書の両方の場所で正常に動作する原因は何ですか?
詳細
証明書は Base64 のデータベースに保存されます。コンソール アプリは DB から証明書を読み取り、それを Base64 から byte[] に変換してから、X509Certificate2
上記のようにオブジェクトを作成しようとします。
私がテストした3つの証明書があります:
- 私の雇用主の CA から提供された私の個人的なクライアント認証証明書。
- 同僚が独自の自己署名 CA を使用して作成したテスト証明書。
- 自己署名 CA を使用して自分で作成した独自のテスト証明書。
証明書 1 と 2 は、コンソール アプリと LinqPad の両方で期待どおりに機能します。
証明書 3 は LinqPad では正常に読み込まれますが、コンソール アプリで使用しようとすると上記のエラーが発生します。
証明書 2 と 3 の間には 2 つの大きな違いがあります。
- Cert2 は 2016 年に期限切れになり、Cert3 は 2039 年に期限切れになります
- cert2 に関連付けられた秘密鍵は 2048 ビットです。Cert3 は 1024 ビットです。
これらの違いのいずれかにより、「指定されたネットワーク パスワードが正しくありません」というエラーが発生する可能性はありますか? また、LinqPad では 3 つの証明書すべてが正常に機能するのに、コンソール アプリでは 1 つだけがエラーをスローするのはなぜですか?