Что именно происходит, когда я устанавливаю LoadUserProfile пула IIS?
У меня возникла следующая проблема.
Я запускаю следующий код
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
в двух процессах. Один из процессов работает под LOCAL_SYSTEM
, и этот код преуспевает. Другой работает внутри 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
и какие последствия могут иметь. Я имею в виду, если это "хорошая" вещь, то почему она не "on" по умолчанию и почему она существует в конце концов?
Что именно происходит, когда я устанавливаю LoadUserProfile
в пуле IIS и какие его последствия могут иметь?
Ответы
Ответ 1
Я имею в виду, если это "хорошая" вещь, то почему она не "on" по умолчанию и почему она там в конце?
IIS 6 никогда не загружал пользовательские профили. Я бы предположил, что по умолчанию это отключено, чтобы поддерживать согласованность поведения, и администратор должен отказаться от него.
Я попытался включить LoadUserProfile для пула приложений и теперь работает.
Это наиболее вероятно, потому что поставщик криптографических услуг Windows пытался хранить или загружать ключ для вашего сертификата в хранилище пользователей, а так как профиль недоступен, криптографический контекст не было доступно. Обратите внимание, что параметр Load User Profile
применяется только к учетным записям пользователей. Учетные записи служб, такие как NETWORK SERVICE и ApplicationPoolIdentity, имеют специальную обработку.
Что именно происходит, когда я устанавливаю LoadUserProfile в пуле IIS
Ну, пользовательский профиль загружен. Это включает в себя их криптографический магазин, переменные среды, такие как% TEMP% и другие.
То, что в конечном итоге сводится к LoadUserProfile
, вызывается IIS при запуске AppPool.
какие отрицательные последствия могут иметь?
Он может нарушить совместимость с приложением, запущенным на IIS 6, который не загружал пользовательский профиль. Загружаются переменные среды. Например, когда Load User Profile имеет значение true, переменная среды% TEMP% C:\Users\AccountName\AppData\Local\Temp
(например). Когда false, оно C:\WINDOWS\Temp
.