.pfx
X.509 証明書を含むファイルの内容を表すバイト配列を受け取る ASP.NET Web サービスがあります。サーバー側のコードは、System.Security.Cryptography.X509Certificate2
コンストラクターを使用してバイトから証明書をロードしています。
X509Certificate2 native_cert = new X509Certificate2(
pkcs12_buf /*byte array*/,
password,
X509KeyStorageFlags.PersistKeySet |
X509KeyStorageFlags.Exportable
);
サービス プロセスが誰として実行されているかに応じて、この呼び出しは成功するか、「内部エラー」例外で失敗します。例外スタックの最後の呼び出しはです。X509Utils._LoadCertFromBlob
これは のアンマネージ コードですmscore.dll
。
このコードは、サービス アカウントの資格情報を使用して対話型ログインでコンソール アプリケーションから実行すると成功します。w3wp.exe
サービス アカウントの資格情報を使用するアプリケーション プールで実行すると失敗します。アプリ プール ID を管理者に変更すると問題が解決するため、権限の問題であるに違いありませんが、これにはどのような権限が必要なのかわかりません。このコードは、ファイル システムや Windows 証明書ストアには触れません。
[更新: 詳細情報]
Windows イベント ログに次のエラーが表示されます。
*Cryptographic Parameters:*
**Provider Name:** Microsoft Software Key Storage Provider
**Algorithm Name:** Not Available.
**Key Name:** {E182E13B-166D-472A-A24A-CBEF0808E9ED}
**Key Type:** User key.
*Cryptographic Operation:*
**Operation:** Open Key.
**Return Code:** 0x2
何か案は?