Jak mogę przekonwertować plik certyfikatu PFX do użytku z Apache na serwerze Linux?


110

Jak mogę przekonwertować plik certyfikatu PFX do użytku z Apache na serwerze Linux?

Utworzyłem PFX z Windows Certificate Services. PFX zawiera cały łańcuch certyfikatów. (Co jest tylko korzeniem i głównym certyfikatem, bez pośrednictwa).

Prowadź mnie, mądrzy.

Odpowiedzi:


194

Dzięki OpenSSL możesz przekonwertować pfx do formatu kompatybilnego z Apache za pomocą następujących poleceń:

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

Pierwsze polecenie wyodrębnia klucz publiczny do domain.cer.
Drugie polecenie wyodrębnia klucz prywatny do domain.key.

Zaktualizuj plik konfiguracyjny Apache za pomocą:

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

Brakuje polecenia generowania pliku ośrodka certyfikacji. Poniższa odpowiedź jest bardziej kompletna.
Hawkee

100

Oprócz

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

Wygenerowałem również certyfikat urzędu certyfikacji (CA):

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

I zawarł to w pliku konfiguracyjnym 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
Uwaga: jeśli certyfikat CA będzie pusty - nie umieszczaj tego wiersza w pliku konfiguracyjnym.
Andron,

@Andron Kiedy używam trzeciego polecenia do utworzenia certyfikatu CA, wynikiem jest pusty plik crt. Próbowałem użyć zarówno pliku serverSSL pfx, jak i pliku pfx rootCA jako danych wejściowych. (bitnami wamp) Ostateczny wynik jest taki, że Firefox wyświetla mi The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERbłąd.
khargoosh

@khargoosh, jak napisałem w komentarzu: jeśli jest pusty - po prostu nie używaj / dołączaj tę linię. Miałem taką samą sytuację.
Andron

31

Aby to działało z Apache, potrzebowaliśmy jednego dodatkowego kroku.

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

Ostatnie polecenie odszyfrowuje klucz do użytku z Apache. Plik domain.key powinien wyglądać następująco:

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

MIŁY! W przypadku Bitnami lub innych potrzebujących również kodu CA crt, spójrz na odpowiedź od Androna, aby dołączyć plik CA crt. Użyj nazw server-ca.crt (zamiast domain-ca.crt w odpowiedzi Androna), server.crt (zamiast domain.cer) i server.key (zamiast domain.key) w nomenklaturze Michaela Ferrante'a odpowiedz tutaj.
OldGreg

3

Wziąłem trochę narzędzi, ale na tym skończyłem.

Wygenerowano i zainstalowano certyfikat w usługach IIS7. Eksportowane jako PFX z IIS

Konwertuj na pkcs12

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

UWAGA: Podczas konwersji PFX do formatu PEM openssl umieści wszystkie certyfikaty i klucz prywatny w jednym pliku. Będziesz musiał otworzyć plik w edytorze tekstu i skopiować każdy certyfikat i klucz prywatny (w tym instrukcje BEGIN / END) do własnego indywidualnego pliku tekstowego i zapisać je odpowiednio jako certificate.cer, CAcert.cer, privateKey.key.

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

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

Dodano do apache vhost w / Webmin.


Jeśli nie chcesz, aby klucz prywatny i certyfikaty znalazły się w tym samym pliku, użyj -nokeys(nie wyodrębniaj klucza prywatnego) i -clcerts(aby wyodrębnić tylko certyfikat). Dokładnie tak powiedział Matej.
Bruno,

0

SSLSHopper ma kilka całkiem dokładnych artykułów o poruszaniu się między różnymi serwerami.

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

Po prostu wybierz odpowiedni link u dołu tej strony.

Uwaga: mają konwerter online, który daje im dostęp do twojego klucza prywatnego. Prawdopodobnie można im ufać, ale lepiej byłoby użyć polecenia OPENSSL (również pokazanego na tej stronie), aby zachować prywatny klucz prywatny na własnym komputerze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.