web-dev-qa-db-ja.com

IISプールのLoadUserProfileを設定するとどうなりますか?

私は次の問題に直面しました。

私は次のコードを実行します

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を設定すると、正確に何が起こりますか?

92
sharptooth

つまり、それが「良い」ものであれば、なぜデフォルトで「オン」ではないのか、なぜそこにあるのかということです。

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です。

104
vcsjones