visual valid net example documentacion comment comentarios code c# .net x509certificate cryptographicexception

c# - valid - CryptographicException no fue manejada: el sistema no puede encontrar el archivo especificado



summary example c# (4)

¿Configuró lo siguiente en el grupo de aplicaciones en IIS?

  1. Ir al Administrador de IIS
  2. Ir a la instancia del grupo de aplicaciones
  3. Haga clic en la configuración avanzada
  4. En Modelo de proceso, establezca Cargar perfil de usuario en verdadero

Vea esta pregunta de la pila para leer más: ¿Qué sucede exactamente cuando configuro LoadUserProfile del grupo IIS?

Estoy tratando de abrazar los misterios de la comunicación SSL y he encontrado un excelente tutorial en este sitio . Estaba tratando de probar mi propio certificado. Con Visual Studio 2012, simplemente agregué un archivo existente (mi certificado en formato .pfx) y luego cambié la configuración de "certificado" y "contraseña" en app.config. Sin embargo, al intentar ejecutarlo, recibí un error:

CryptographicException no fue manejada: el sistema no puede encontrar el archivo especificado

Entonces, intenté lo mismo en mi servicio web. Ahí tengo algunos detalles más sobre el error:

System.Security.Cryptography.CryptographicException: System cannot find specified file. at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr) at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(String fileName) at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags) v System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password) v TestServer.DataService.LoadSoap() v c:/Users/Administrator/Documents/Visual Studio 2012/Projects/TestServer/TestServer/DataService.asmx.cs:line 48

He escrito esta pregunta al autor del artículo, pero desde su última respuesta fue en marzo de 2012, no estoy seguro de si responderá. Si alguien pudiera ayudarme con este problema, estaría muy agradecido.

PD: Al exportar el certificado de .cer a .pfx, he cambiado el título del archivo exportado. Aunque dudo que tenga un efecto en el problema, prefiero mencionarlo.


Al pasar CspParameters con el indicador csdMachineKeyKeyStore, IIS puede omitir la restricción que produce la excepción.

CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = Guid.NewGuid().ToString().ToUpperInvariant(); cspParams.Flags = CspProviderFlags.UseMachineKeyStore; RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspParams);

Encontré la solución aquí:

Enlace al recurso de información


Debido a que esta pregunta tiene un alto rango de búsqueda, me gustaría presentar una forma de presentar X509Certificate2 con una ruta absoluta (que solo acepta) a un archivo de clave pxf relativamente ubicado en una aplicación ASP.net.

string path = HttpContext.Current.Server.MapPath("~") + "../keys/relative_key.pfx"; X509Certificate2 cert = new X509Certificate2(path, "", X509KeyStorageFlags.DefaultKeySet);


Para aquellos de ustedes que recibieron la Excepción criptográfica al intentar importar un X509Certificate2 usando el método Importar, descubrí que el uso de la opción Enum para MachineKeySet omitió la necesidad de crear un UserContext en IIS, y por lo tanto es más fácil de implementar.

X509Certificate2 cert = new X509Certificate2(); cert.Import(certificateFilePath, certPasshrase, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);