example c# .net x509certificate2 pfx

x509certificate2 c# example



¿Cómo cargar certificados protegidos por contraseña desde X509Store? (2)

Cuando exporta, la contraseña que proporciona es la contraseña que desea utilizar para el archivo exportado, no es la contraseña para el certificado de origen.

No estoy seguro de lo que puede hacer con X509Store y certificados protegidos con contraseña porque la contraseña debe proporcionarse al constructor de Certificados X509 y usted obtiene objetos ya instanciados de la tienda.

Creo que solo puede obtener los datos en bruto del certificado que desea y construir uno nuevo con la contraseña que desea. Por ejemplo:

X509Certificate2 cert = new X509Certificate2(certCollection[0].GetRawCertData, password);

También le sugiero que intente utilizar SecureString cuando se trata de contraseñas (pero eso es una bolsa diferente de gusanos ...)

Estoy creando un servicio Azure WCF protegido por ACS que requerirá que los clientes se autentiquen a través de un certificado.

Me gustaría que el cliente (y el servidor) carguen sus respectivos certificados de contraseña de X509Store en lugar de hacerlo desde el sistema de archivos.

Estoy usando este código:

private static X509Certificate2 GetCertificate(string thumbprint) { var certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine); certStore.Open(OpenFlags.ReadOnly); X509Certificate2Collection certCollection = certStore.Certificates.Find( X509FindType.FindByThumbprint, thumbprint, false); certStore.Close(); if (certCollection.Count == 0) { throw new System.Security.SecurityException(string.Format(CultureInfo.InvariantCulture, "No certificate was found for thumbprint {0}", thumbprint)); } return certCollection[0]; }

El problema es que no está cargando la clave privada que necesita para la autenticación. He intentado modificar la declaración de retorno a esto:

return new X509Certificate2(certCollection[0].Export(X509ContentType.Pfx, "password"));

Sin embargo, esto falla con una CryptographicException "La contraseña de red especificada es incorrecta".

Editar: El método .Export () funciona correctamente si no pasa el argumento de la contraseña.

¿Alguna ayuda en esto?


Utilicé Exportar sin el parámetro ''contraseña'' y funcionó sin problemas.