c# - ¿Qué ocurre exactamente cuando configuro LoadUserProfile del conjunto de IIS?
.net iis-7 (1)
Me enfrenté al siguiente problema.
Ejecuto el siguiente código
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
en dos procesos. Uno de los procesos se ejecuta bajo LOCAL_SYSTEM
y allí este código tiene éxito. Otro se ejecuta dentro de IIS en una cuenta de usuario local que pertenece al grupo local "Usuarios" y allí obtengo la siguiente excepción:
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
Así que busqué en Google un poco y encontré esta respuesta a una especie de pregunta similar. Intenté habilitar LoadUserProfile
para el grupo de aplicaciones y funciona ahora.
El problema es que no entiendo qué ocurre exactamente cuando configuro LoadUserProfile
y qué consecuencias podría tener. Quiero decir, si es algo "bueno", ¿por qué no está "activado" por defecto y por qué está ahí después de todo?
¿Qué sucede exactamente cuando configuro LoadUserProfile
en el grupo IIS y qué consecuencias negativas puede tener?
Quiero decir, si es algo "bueno", ¿por qué no está "activado" por defecto y por qué está ahí después de todo?
IIS 6 nunca cargó perfiles de usuario. Asumo que esto está desactivado de manera predeterminada para mantener la coherencia del comportamiento, y un administrador tiene que aceptarlo.
Intenté habilitar LoadUserProfile para el grupo de aplicaciones y funciona ahora.
Esto es muy probable porque el proveedor de servicios de criptografía de Windows estaba tratando de almacenar o cargar una clave para su certificado en el almacén de usuarios, y dado que un perfil no estaba disponible, un contexto criptográfico no estaba disponible. Tenga en cuenta que la configuración Load User Profile
solo se aplica a las cuentas de usuario. Las cuentas de servicio como NETWORK SERVICE y ApplicationPoolIdentity tienen un manejo especial.
¿Qué sucede exactamente cuando configuro loadUserProfile en el grupo de IIS?
Bueno, el perfil de usuario está cargado. Esto incluye su almacén criptográfico, variables de entorno como% TEMP% y otras.
Lo que finalmente se reduce a LoadUserProfile
es invocado por IIS cuando se inicia el AppPool.
¿Qué consecuencias negativas puede tener?
Puede romper la compatibilidad con una aplicación que se ejecutó en IIS 6, que no cargó el perfil del usuario. Las variables de entorno están cargadas. Por ejemplo, cuando Load User Profile es verdadero, la variable de entorno% TEMP% es C:/Users/AccountName/AppData/Local/Temp
(por ejemplo). Cuando es falso, es C:/WINDOWS/Temp
.