IISプールのLoadUserProfileを設定すると、正確にはどうなりますか?


103

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

次のコードを実行します

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したときに正確に何が起こるのか、どのような結果が得られるのかがわからないことです。つまり、それが「良い」ものである場合、デフォルトで「オン」にならないのはなぜですか、結局そこにあるのはなぜですか。

LoadUserProfileIISプールで設定すると、正確にはどうなりますか?


6
後から考えてみますが、ユーザープロファイルの読み込みに問題がある場合は、証明書の読み込みをに変更しnew X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)て、ユーザープロファイルが不要になるようにすることができます。
vcsjones 2013年

1
ApplicationPoolIdentityとして実行している場合new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)は、ストアへの秘密キーの書き込みを回避し、サーバーの管理者権限を必要としないものを使用する必要があります。
ネイト

回答:


117

つまり、それが「良い」ものである場合、デフォルトで「オン」にならないのはなぜですか、結局そこにあるのはなぜですか。

IIS 6はユーザープロファイルをロードしませんでした。動作の一貫性を保つために、これはデフォルトでオフになっていると思います。管理者はこれをオプトインする必要があります。

アプリケーションプールのLoadUserProfileを有効にしようとしましたが、現在は機能しています。

これは、Windows暗号化サービスプロバイダーがユーザーストアに証明書のキーを格納またはロードしようとしていたことと、プロファイルが利用できなかったため、暗号化コンテキストが利用できなかったことが原因と考えられます。このLoad User Profile設定はユーザーアカウントにのみ適用されることに注意してください。NETWORK SERVICEやApplicationPoolIdentityなどのサービスアカウントには特別な処理があります。

IISプールでLoadUserProfileを設定すると、正確にはどうなりますか

ユーザープロファイルが読み込まれました。これには、暗号化ストア、%TEMP%などの環境変数、およびその他のものが含まれます。

最終的にはLoadUserProfile、AppPoolの起動時にIISによって呼び出されます。

それはどのような悪影響を及ぼしますか?

ユーザープロファイルをロードしなかったIIS 6で実行されたアプリとの下位互換性が失われる可能性があります。環境変数が読み込まれます。たとえば、ユーザープロファイルの読み込みがtrueの場合、%TEMP%環境変数はC:\Users\AccountName\AppData\Local\Temp(たとえば)になります。falseの場合はC:\WINDOWS\Tempです。


1
アプリケーションプールIDとしてのNETWORK SERVICEの+1ですが、ApplicationPoolIdentityは成功しませんでした。
David d C e Freitas 2014年

3
「ユーザープロファイルを読み込まなかったIIS 6で実行されたアプリとの下位互換性が失われる可能性があります。」また、パフォーマンス(プロファイルを実際にロードする必要があります。これは、たとえば、HKCUレジストリハイブをロードすることを意味します)とセキュリティ(大きな潜在的なベクトル)の影響もあると思います。
ソレンKuklau

1
LoadUserProfile=trueIISで設定して、デフォルトの一時フォルダー%TEMP%の場所をC:\Users\C:\Users\AccountName\AppData\Local\Temp別の場所に変更することはできますか?例 "D:\ AppTempData"
Murali Murugesan '18

Murali Murugesan-この質問への回答を得たことがありますか?同じ問題があります。デフォルトの一時ディレクトリを変更したい。
VBAHole 2017年

1
私はこの数年前に、X509クライアント証明書認証によって保護されたリモートWebサービスを呼び出すバックエンドサービスを作成していました。個人証明書はユーザーのプロファイルに格納されるため、サービスをインストールするときに、サービスのログオンアカウントとしてターゲットサーバーにログオンし、ユーザープロファイルを作成してから、クライアント証明書をログオンアカウントの証明書ストアにインストールする必要がありました。その後、クライアント証明書は実行時にロードされます。
クレイグボーランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.