Wie kann ich eine PFX-Zertifikatdatei zur Verwendung mit Apache auf einem Linux-Server konvertieren?

110

Wie kann ich eine PFX-Zertifikatdatei zur Verwendung mit Apache auf einem Linux-Server konvertieren?

Ich habe den PFX aus den Windows-Zertifikatdiensten erstellt. Der PFX enthält die gesamte Zertifikatkette. (Das ist nur eine Wurzel und das Hauptzertifikat, kein Zwischenprodukt.)

Führe mich, Weise.

AaronJAnderson
quelle

Antworten:

194

Mit OpenSSL können Sie pfx mit den folgenden Befehlen in ein Apache-kompatibles Format konvertieren:

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

Der erste Befehl extrahiert den öffentlichen Schlüssel zu domain.cer.
Der zweite Befehl extrahiert den privaten Schlüssel zu domain.key.

Aktualisieren Sie Ihre Apache-Konfigurationsdatei mit:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>
Matej
quelle
Hier fehlt der Befehl zum Generieren der Zertifizierungsstellendatei. Die Antwort unten ist vollständiger.
Hawkee
100

Zusätzlich zu

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

Ich habe auch ein Zertifikat der Zertifizierungsstelle (Certificate Authority, CA) generiert:

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

Und in die Apache-Konfigurationsdatei aufgenommen:

<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
quelle
8
Hinweis: Wenn das ca-Zertifikat leer ist, fügen Sie diese Zeile bitte nicht in die Konfigurationsdatei ein.
Andron
@Andron Wenn ich den dritten Befehl zum Erstellen des CA-Zertifikats verwende, ist das Ergebnis eine leere CRT-Datei. Ich habe versucht, sowohl die serverSSL-pfx-Datei als auch die rootCA-pfx-Datei für die Eingabe zu verwenden. (bitnami wamp) Das Endergebnis ist, dass Firefox mir einen The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERFehler gibt.
Khargoosh
@khargoosh wie ich im Kommentar berichtet habe: Wenn es leer ist - benutze / füge diese Zeile einfach nicht ein. Ich hatte die gleiche Situation.
Andron
31

Damit es mit Apache funktioniert, brauchten wir einen zusätzlichen Schritt.

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

Der letzte Befehl entschlüsselt den Schlüssel zur Verwendung mit Apache. Die Datei domain.key sollte folgendermaßen aussehen:

-----BEGIN RSA PRIVATE KEY-----
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-----END RSA PRIVATE KEY-----
Michael Ferrante
quelle
NETT! Für Bitnami oder andere, die ebenfalls die CA-CRT benötigen, lesen Sie die Antwort von Andron, um die CA-CRT einzuschließen. Verwenden Sie die Nomenklatur server-ca.crt (anstelle von domain-ca.crt in Androns Antwort), server.crt (anstelle von domain.cer) und server.key (anstelle von domain.key) in Michael Ferrantes antworte hier.
OldGreg
3

Ich habe ein paar Werkzeuge herumgenommen, aber das ist es, was ich am Ende hatte.

Generierte und installierte ein Zertifikat auf IIS7. Exportiert als PFX aus IIS

In pkcs12 konvertieren

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

HINWEIS: Während der Konvertierung von PFX in das PEM-Format werden bei openssl alle Zertifikate und der private Schlüssel in einer einzigen Datei gespeichert. Sie müssen die Datei im Texteditor öffnen und jeden Zertifikat- und privaten Schlüssel (einschließlich der BEGIN / END-Anweisungen) in eine eigene Textdatei kopieren und als certificate.cer, CAcert.cer bzw. privateKey.key speichern.

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

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

Hinzugefügt zu apache vhost w / Webmin.

AaronJAnderson
quelle
Wenn Sie nicht möchten, dass der private Schlüssel und die Zertifikate in derselben Datei landen, verwenden Sie -nokeys(nicht, um den privaten Schlüssel -clcertszu extrahieren ) und (um nur das Zertifikat zu extrahieren). Genau das hat Matej gesagt.
Bruno
0

SSLSHopper enthält einige ziemlich gründliche Artikel zum Wechseln zwischen verschiedenen Servern.

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

Wählen Sie einfach den entsprechenden Link unten auf dieser Seite.

Hinweis: Sie verfügen über einen Online-Konverter, mit dem sie auf Ihren privaten Schlüssel zugreifen können. Sie können wahrscheinlich vertrauenswürdig sein, aber es ist besser, den Befehl OPENSSL (ebenfalls auf dieser Site gezeigt) zu verwenden, um den privaten Schlüssel auf Ihrem eigenen Computer privat zu halten.

Simon_Weaver
quelle