Como posso converter um arquivo de certificado PFX para uso com Apache em um servidor Linux?

110

Como posso converter um arquivo de certificado PFX para uso com Apache em um servidor Linux?

Criei o PFX a partir dos Serviços de Certificados do Windows. O PFX contém toda a cadeia de certificação. (Que é apenas uma raiz e o certificado principal, sem intermediário.)

Guie-me, sábios.

AaronJAnderson
fonte

Respostas:

194

Com OpenSSL, você pode converter pfx para formato compatível com Apache com os próximos comandos:

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key   

O primeiro comando extrai a chave pública para domain.cer.
O segundo comando extrai a chave privada para domain.key.

Atualize seu arquivo de configuração do Apache com:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>
Matej
fonte
Falta o comando para gerar o arquivo de autoridade de certificação. A resposta abaixo é mais completa.
Hawkee 01 de
100

Além de

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key

Eu também gerei o certificado da Autoridade de Certificação (CA):

openssl pkcs12 -in domain.pfx -out domain-ca.crt -nodes -nokeys -cacerts

E incluiu no arquivo de configuração do Apache:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 SSLCACertificateFile /path/to/domain-ca.crt
 ...
</VirtualHost>
Andron
fonte
8
Nota: se o certificado ca estiver vazio - por favor, não inclua esta linha no arquivo de configuração.
Andron
@Andron quando eu uso o terceiro comando para criar o certificado CA, o resultado é um arquivo crt vazio. Tentei usar o arquivo serverSSL pfx e o arquivo rootCA pfx para entrada. (bitnami wamp) O resultado final é que o firefox me dá um The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERerro.
khargoosh
@khargoosh como eu relatei no comentário: se estiver vazio - apenas não use / inclua esta linha. Eu tive a mesma situação.
Andron
31

Para fazê-lo funcionar com o Apache, precisamos de uma etapa extra.

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain_encrypted.key
openssl rsa -in domain_encrypted.key -out domain.key

O comando final descriptografa a chave para uso com o Apache. O arquivo domain.key deve ter a seguinte aparência:

-----BEGIN RSA PRIVATE KEY-----
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-----END RSA PRIVATE KEY-----
Michael Ferrante
fonte
LEGAIS! Para Bitnami ou outros que também precisem do CA crt, consulte a resposta de Andron para incluir o CA crt. Use a nomenclatura server-ca.crt (no lugar de domain-ca.crt na resposta de Andron), server.crt (no lugar de domain.cer) e server.key (no lugar de domain.key) na de Michael Ferrante responda aqui.
OldGreg
3

Levei algumas ferramentas, mas foi assim que acabei.

Gerou e instalou um certificado no IIS7. Exportado como PFX do IIS

Converter para pkcs12

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

NOTA: Ao converter o formato PFX em PEM, o openssl colocará todos os certificados e chaves privadas em um único arquivo. Você precisará abrir o arquivo no editor de texto e copiar cada certificado e chave privada (incluindo as instruções BEGIN / END) em seu próprio arquivo de texto individual e salvá-los como certificate.cer, CAcert.cer, privateKey.key respectivamente.

-----BEGIN PRIVATE KEY-----
Saved as certificate.key
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
Saved as certificate.crt
-----END CERTIFICATE-----

Adicionado ao apache vhost w / Webmin.

AaronJAnderson
fonte
Se você não quiser que a chave privada e os certificados terminem no mesmo arquivo, use -nokeys(não para extrair a chave privada) e -clcerts(para extrair apenas o certificado). Isso é exatamente o que Matej disse.
Bruno
0

SSLSHopper tem alguns artigos bastante completos sobre a movimentação entre diferentes servidores.

http://www.sslshopper.com/how-to-move-or-copy-an-ssl-certificate-from-one-server-to-another.html

Basta escolher o link relevante na parte inferior desta página.

Nota: eles têm um conversor online que lhes dá acesso à sua chave privada. Eles provavelmente são confiáveis, mas seria melhor usar o comando OPENSSL (também mostrado neste site) para manter a chave privada privada em sua própria máquina.

Simon_Weaver
fonte