Pergunta

Histórico: Eu tenho um PKCS # 12 (p12) certificado com uma cifra simétrica (senha) que eu usei OpenSSL para converter em um PEM; abertura que como texto vejo que ele contém tanto uma seção BEGIN/END CERTIFICATE, bem como BEGIN/END RSA PRIVATE KEY. A classe X509Certificate .NET Framework suporta apenas o formato "ASN.1 DER", então eu usei OpenSSL para converter o PEM DER. Infelizmente, parece fazer isso não inclui a chave privada, que é o que eu preciso para fazer uma conexão SSL com SslStream & 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();

Como faço para pegar este arquivo PEM e torná-lo em um DER, mantendo as informações de chave privada para que eu possa usá-lo em .NET para assinatura?

Foi útil?

Solução

Oops, eu sou para trás os tempos! Looks como X509Certificate2 pode ler arquivos PKCS # 12 por isso não há necessidade de qualquer conversão.

Outras dicas

Certificados e chaves geralmente são armazenados separadamente. Cortar o arquivo PEM em dois arquivos, um com o certificado e um com a chave. Você pode então usar o kit de ferramentas OpenSSL para converter cada arquivo separadamente em um arquivo DER.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top