次の問題に直面しました。
次のコードを実行します
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
2つのプロセスで。プロセスの1つが実行されLOCAL_SYSTEM
、そこでこのコードは成功します。別の1つはIIS内で "Users"ローカルグループに属するローカルユーザーアカウントで実行され、次の例外が発生します。
System.Security.Cryptography.CryptographicException
Object was not found.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password)
//my code here
だから私は少しグーグルで調べて、一種の同様の質問に対するこの答えを見つけました。LoadUserProfile
アプリケーションプールを有効にしようとしたところ、現在は機能しています。
問題は、設定LoadUserProfile
したときに正確に何が起こるのか、どのような結果が得られるのかがわからないことです。つまり、それが「良い」ものである場合、デフォルトで「オン」にならないのはなぜですか、結局そこにあるのはなぜですか。
LoadUserProfile
IISプールで設定すると、正確にはどうなりますか?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
は、ストアへの秘密キーの書き込みを回避し、サーバーの管理者権限を必要としないものを使用する必要があります。
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
て、ユーザープロファイルが不要になるようにすることができます。