Come posso convertire un certificato SSL da PEM a DER e conservare la chiave privata?
-
03-07-2019 - |
Domanda
Backstory: ho un certificato PKCS # 12 (p12) con una cifra simmetrica (password) che ho usato OpenSSL per convertire in un PEM; aprendo che come testo vedo che contiene sia una sezione BEGIN / END CERTIFICATE
, sia BEGIN / END RSA PRIVATE KEY
. La classe .NET Framework X509Certificate
supporta solo la voce "ASN.1 DER " formato, quindi ho usato OpenSSL per convertire il PEM in DER. Sfortunatamente sembra che ciò non includa la chiave privata di cui ho bisogno per stabilire una connessione 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();
Come posso prendere questo file PEM e trasformarlo in un DER mantenendo le informazioni sulla chiave privata in modo da poterlo usare in .NET per la firma?
Soluzione
Oops, sono dietro i tempi! Sembra che X509Certificate2
sia in grado di leggere i file PKCS # 12, quindi non è necessaria alcuna conversione.
Altri suggerimenti
I certificati e le chiavi vengono generalmente archiviati separatamente. Tagliare il file PEM in due file, uno con il certificato e uno con la chiave. È quindi possibile utilizzare il toolkit openssl per convertire ciascun file separatamente in un file DER.