estoy creando un certificado x509 usando makecert con los siguientes parámetros:Crear certificado x509 con la herramienta openssl/makecert
makecert -r -pe -n "CN = Cliente" -SS MyApp
Quiero usar este certificado para cifrar y descifrar datos con el algoritmo RSA. Miro al certificado generado en Windows Certificate Store y todo parece estar bien (Tiene una clave privada, clave pública es una clave RSA con 1024 bits y así sucesivamente ...)
Ahora uso este código C# para cifrar datos:
X509Store store = new X509Store("MyApp", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Client", false);
X509Certificate2 _x509 = certs[0];
using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)_x509.PublicKey.Key)
{
byte[] dataToEncrypt = Encoding.UTF8.GetBytes("hello");
_encryptedData = rsa.Encrypt(dataToEncrypt, true);
}
Al ejecutar el método Encrypt, recibo una CryptographicException con el mensaje "Bad key".
Creo que el código está bien. Probablemente no estoy creando el certificado correctamente. ¿Algún comentario? Gracias
---------------- EDIT --------------
Si alguien sabe cómo crear el certificado usando OpenSsl, también es una respuesta válida para mí.
Al crear su certificado, ¿cuál es el bit de los pares de clave privada/pública que especifique? probablemente tenga que especificar claves más largas 4048 bits? – berkay
No estoy seguro de qué opción estás hablando. Acabo de usar las opciones que muestro arriba en el comando makecert. Si está hablando el uno del otro, asuma el valor predeterminado. Pero mi clave pública tiene 1024 bits. –
okey, entonces nunca uso makecert solo busque para crearlo 4048 bits.1024 bits se rompe por eso puede obtener el error. – berkay