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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top