¿Cómo puedo convertir un certificado SSL de PEM a DER y mantener la clave privada?
-
03-07-2019 - |
Pregunta
Backstory: Tengo un certificado PKCS # 12 (p12) con un cifrado simétrico (contraseña) que usé OpenSSL para convertir a un PEM; abriéndolo como texto, veo que contiene una sección BEGIN / END CERTIFICATE
y una BEGIN / END RSA PRIVATE KEY
. La clase X509Certificate
de .NET Framework solo es compatible con " ASN.1 DER " Formato, así que usé OpenSSL para convertir el PEM a DER. Lamentablemente, al hacer esto no se incluye la clave privada, que es lo que necesito para establecer una conexión SSL con SslStream
& amp; TcpClient
.
X509CertificateCollection certsFromFile = new X509CertificateCollection();
X509Certificate2 cert = new X509Certificate2("my.der.crt");
if (!cert.HasPrivateKey)
throw new Exception("No private key");
certsFromFile.Add(cert);
TcpClient tcpclient = new TcpClient(hostname, port);
SslStream sslstream = new SslStream(tcpclient.GetStream(), false,
null, null);
sslstream.AuthenticateAsClient(hostname, certsFromFile,
SslProtocols.Ssl3, false);
sslstream.Close();
tcpclient.Close();
¿Cómo tomo este archivo PEM y lo convierto en un DER a la vez que conservo la información de la clave privada para poder usarlo en .NET para firmar?
Solución
¡Uy, estoy detrás de los tiempos! Parece que X509Certificate2
puede leer archivos PKCS # 12, por lo que no es necesario realizar ninguna conversión.
Otros consejos
Los certificados y las claves generalmente se almacenan por separado. Corte el archivo PEM en dos archivos, uno con el certificado y otro con la clave. Luego puede usar el kit de herramientas openssl para convertir cada archivo por separado en un archivo DER.