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 LOCAL_SYSTEMy allí este código tiene éxito. Otro se ejecuta dentro de IIS bajo 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 pregunta similar. Intenté habilitar LoadUserProfilepara el grupo de aplicaciones y ahora funciona.
El problema es que no entiendo qué sucede exactamente cuando establezco LoadUserProfiley 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 el LoadUserProfilegrupo IIS y qué consecuencias negativas puede tener?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)que evita escribir la clave privada en la tienda y no requerirá privilegios administrativos en el servidor.
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)que no necesite un perfil de usuario.