私は次の問題に直面しました。
私は次のコードを実行します
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
2つのプロセスで。プロセスの1つはLOCAL_SYSTEM
の下で実行され、そこでこのコードは成功します。もう1つは、「Users」ローカルグループに属するローカルユーザーアカウントでIIS内で実行され、次の例外が発生します。
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
を設定したときに正確に何が起こるか、またどのような結果になるかがわからないことです。つまり、それが「良い」ものであれば、なぜデフォルトで「オン」ではないのか、なぜそこにあるのかということです。
IISプールにLoadUserProfile
を設定すると、正確に何が起こりますか?
つまり、それが「良い」ものであれば、なぜデフォルトで「オン」ではないのか、なぜそこにあるのかということです。
IIS 6はユーザープロファイルをロードしませんでした。動作の一貫性を保つために、これはデフォルトでオフになっていると思いますが、管理者はオプトインする必要があります。
アプリケーションプールのLoadUserProfileを有効にしようとしましたが、現在は機能しています。
これは、Windows Cryptographic Service Providerがユーザーストアに証明書のキーを保存またはロードしようとしており、プロファイルが利用できなかったため、 暗号化コンテキスト が利用できなかったためです。 Load User Profile
設定はユーザーアカウントにのみ適用されることに注意してください。 NETWORK SERVICEやApplicationPoolIdentityなどのサービスアカウントには特別な処理があります。
LoadUserProfileをIISプールに設定すると、正確にどうなりますか
さて、ユーザープロファイルが読み込まれます。これには、暗号化ストア、%TEMP%などの環境変数などが含まれます。
最終的には LoadUserProfile
は、AppPoolの起動時にIISによって呼び出されます。
それはどんな負の結果をもたらすことができますか?
ユーザープロファイルをロードしなかったIIS 6で実行されたアプリとの後方互換性が失われる可能性があります。環境変数がロードされます。たとえば、Load User Profileがtrueの場合、%TEMP%環境変数はC:\Users\AccountName\AppData\Local\Temp
(たとえば)です。 falseの場合、C:\WINDOWS\Temp
です。