Come posso convertire un file di certificato PFX da utilizzare con Apache su un server Linux?


110

Come posso convertire un file di certificato PFX da utilizzare con Apache su un server Linux?

Ho creato il PFX da Servizi certificati di Windows. Il PFX contiene l'intera catena di certificati. (Che è solo una radice e il certificato principale, nessun intermedio.)

Guidami, saggi.

Risposte:


194

Con OpenSSL puoi convertire pfx in un formato compatibile con Apache con i seguenti comandi:

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

Il primo comando estrae la chiave pubblica per domain.cer.
Il secondo comando estrae la chiave privata perdomain.key .

Aggiorna il tuo file di configurazione di Apache con:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>

Manca il comando per generare il file dell'autorità di certificazione. La risposta di seguito è più completa.
Hawkee

100

Oltre a

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

Ho anche generato il certificato dell'autorità di certificazione (CA):

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

E incluso nel file di configurazione di 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>

8
Nota: se il certificato CA sarà vuoto, non includere questa riga nel file di configurazione.
Andron

@Andron quando uso il terzo comando per creare il certificato CA, il risultato è un file crt vuoto. Ho provato a utilizzare sia il file pfx serverSSL che il file pfx rootCA per l'input. (bitnami wamp) Il risultato finale è che firefox mi dà un The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERerrore.
khargoosh

@khargoosh come ho riportato nel commento: se è vuoto, non usare / includere questa riga. Ho avuto la stessa situazione.
Andron

31

Per farlo funzionare con Apache, avevamo bisogno di un passaggio aggiuntivo.

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

Il comando finale decrittografa la chiave per l'utilizzo con Apache. Il file domain.key dovrebbe essere simile a questo:

-----BEGIN RSA PRIVATE KEY-----
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-----END RSA PRIVATE KEY-----

SIMPATICO! Per Bitnami o altri che necessitano anche del CA crt, guarda la risposta di Andron per includere il CA crt. Usa la nomenclatura server-ca.crt (al posto di domain-ca.crt nella risposta di Andron), server.crt (al posto di domain.cer) e server.key (al posto di domain.key) in Michael Ferrante rispondi qui.
OldGreg

3

Ho preso degli strumenti in giro, ma questo è ciò che ho ottenuto.

Generato e installato un certificato su IIS7. Esportato come PFX da IIS

Converti in pkcs12

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

NOTA: durante la conversione di PFX in formato PEM, openssl inserirà tutti i certificati e la chiave privata in un unico file. Sarà necessario aprire il file nell'editor di testo e copiare ogni certificato e chiave privata (comprese le istruzioni BEGIN / END) nel proprio file di testo individuale e salvarli rispettivamente come certificate.cer, CAcert.cer, privateKey.key.

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

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

Aggiunto ad apache vhost con Webmin.


Se non vuoi che la chiave privata e i certificati finiscano nello stesso file, usa -nokeys(per non estrarre la chiave privata) e -clcerts(per estrarre solo il certificato). Questo è esattamente ciò che ha detto Matej.
Bruno

0

SSLSHopper ha alcuni articoli piuttosto approfonditi sullo spostamento tra server diversi.

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

Basta selezionare il collegamento pertinente in fondo a questa pagina.

Nota: hanno un convertitore online che dà loro accesso alla tua chiave privata. Probabilmente ci si può fidare ma sarebbe meglio usare il comando OPENSSL (mostrato anche su questo sito) per mantenere la chiave privata privata sulla propria macchina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.