Czy muszę konwertować .CER na .CRT dla certyfikatów Apache SSL? Jeśli tak to jak?

121

Muszę skonfigurować serwer Apache 2 z SSL.

Mam plik * .key, ale cała dokumentacja, którą znalazłem w Internecie, pliki * .crt, są określone, a mój urząd certyfikacji dostarczył mi tylko plik * .cer.

Czy pliki * .cer są takie same jak * .crt? Jeśli nie, jak mogę przekonwertować CER na format CRT?

MN
źródło
11
CERa CRTrozszerzenia nic nie znaczą. Różni dostawcy PKI używają różnych rozszerzeń do tego samego celu. Jeśli plik jest binarny, prawdopodobnie jest zakodowany w formacie ASN.1 / DER. Jeśli plik jest czytelny dla człowieka za pomocą -----BEGIN CERTIFICATE-----, jest zakodowany w formacie PEM. Co masz (DER lub PEM) i czego potrzebujesz (DER lub PEM)?
jww

Odpowiedzi:

107

Rozszerzenia plików dla certyfikatów kryptograficznych nie są tak standardowe, jak można by oczekiwać. System Windows domyślnie traktuje dwukrotne kliknięcie .crtpliku jako żądanie zaimportowania certyfikatu do głównego magazynu certyfikatów systemu Windows, ale traktuje .cerplik jako żądanie tylko do wyświetlenia certyfikatu. Są więc różne w tym sensie, że system Windows ma nieodłączne inne znaczenie dla tego, co dzieje się po dwukrotnym kliknięciu każdego typu pliku.

Ale sposób, w jaki system Windows obsługuje je po dwukrotnym kliknięciu, jest jedyną różnicą między nimi. Oba rozszerzenia po prostu wskazują, że zawiera certyfikat publiczny. Możesz zmienić nazwę pliku certyfikatu, aby używać jednego rozszerzenia zamiast drugiego w dowolnym pliku systemowym lub konfiguracyjnym, który widziałem. Na platformach innych niż Windows (a nawet w systemie Windows) ludzie nie są szczególnie ostrożni co do używanego rozszerzenia i traktują je zamiennie, ponieważ nie ma między nimi różnicy, o ile zawartość pliku jest poprawna.

Sprawę bardziej zagmatwa fakt, że istnieją dwa standardowe sposoby przechowywania danych certyfikatu w pliku: jeden to „binarne” kodowanie X.509, a drugi to „tekstowe” kodowanie base64, które zwykle zaczyna się od „ -----BEGIN CERTIFICATE-----”. Kodują te same dane, ale na różne sposoby. Większość systemów akceptuje oba formaty, ale w razie potrzeby możesz przekonwertować jeden na drugi za pomocą openssl lub innych narzędzi. Kodowanie w pliku certyfikatu jest naprawdę niezależne od rozszerzenia, które ktoś nadał plikowi.

TylerH
źródło
Rozumiem, że oba są kodowaniem X.509. Nie mówisz inaczej, ale asymetryczne użycie x.509 powyżej może sugerować czytelnikowi coś innego. Dla czytelnika warto zauważyć, że certyfikaty można konwertować w obie strony między tymi dwoma kodami, ponieważ, jak wspomniano w tej odpowiedzi, zawierają te same informacje. Zobacz inną odpowiedź z poleceniami openssl x509 -inform.
FreeText
55

Zgodnie z dokumentacją mod_ssl :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

Plik certyfikatu powinien być zakodowany w PEM Plik certyfikatu X.509:

openssl x509 -inform DER -in certificate.cer -out certificate.pem
Dmitry Grigansky
źródło
Czy rozwiąże to błędy certyfikatów ssl, gdy są one opóźnione zscaler, uruchamiając vagrantw win( vbox homestead), instalując nasze zaufane certyfikaty główne w pudełku włóczęgi? Zrobiłem scpto, następnie użyłem twojej konwersji i dowiązałem je do pliku, /etc/ssl/certsa także skopiowałem zawartość do ca-certificates.crtpliku przed ponownym udostępnieniem, i nadal otrzymuję google-recaptcha tls sslbłąd w file_get_contentsoknie programisty.
blamb
54

Zasadniczo istnieją dwa typy kodowania certyfikatów CER, DER i Base64. Gdy typ DER zwróci błąd podczas ładowania certyfikatu (procedury kodowania asn1), wypróbuj PEM i powinien działać.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Liibo
źródło
3
Format DER działał u mnie, gdy mój plik cer wyglądał jak binarny, kiedy próbowałem go edytować ... dzięki!
Brad Parks
1
Czytelnikowi przydała się strona podręcznika openssl. Było dla mnie niejednoznaczne, które z poleceń robiło (tj. W którą stronę była konwersja). Parametr -inform określa format wejściowego pliku -in, który jest intuicyjny, ale jeśli jesteś już trochę zdezorientowany, dobrze jest wiedzieć wyraźnie. Zobacz openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText
32

Zakładam, że masz plik .cer zawierający dane certyfikatu zakodowane w PKCS # 7 i chcesz przekonwertować go na dane certyfikatu zakodowane w PEM (zazwyczaj plik .crt lub .pem). Na przykład plik .cer zawierający dane zakodowane w formacie PKCS # 7 wygląda następująco:

----- POCZĄTEK PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- KONIEC PKCS7 -----

Dane certyfikatu PEM wyglądają następująco:

----- POCZĄTEK CERTYFIKATU -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- KONIEC CERTYFIKATU -----

Istnieje polecenie OpenSSL, które konwertuje pliki .cer (z danymi PKCS # 7) na dane PEM, których możesz się spodziewać ( BEGIN CERTIFICATEblok w powyższym przykładzie). Możesz wymusić dane PKCS # 7 na format PEM za pomocą tego polecenia w pliku, który nazwiemy certfile.cer:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

Należy zauważyć, że plik .cer lub .pem może zawierać jeden lub więcej certyfikatów (prawdopodobnie cały łańcuch certyfikatów).

Karl Ward
źródło
1
Byłoby przydatne, gdybyś miał źródło tego założenia. Myślę, że ludzie używają (prawdopodobnie niepoprawnie) .cer, .crt, .pem zamiennie), więc posiadanie źródła prawdy poprawiłoby błędne przekonania.
PhilT
30

CER to certyfikat X.509 w formie binarnej, zakodowany w formacie DER .
CRT to binarny certyfikat X.509 zawarty w kodowaniu tekstowym ( base-64 ).

To nie jest to samo kodowanie.

Spawnrider
źródło
13
Ta odpowiedź jest po prostu błędna. Zarówno .CER, jak i .CRT mogą używać kodowania DER lub PEM (tekst). Rozszerzenia .pem i .der odzwierciedlają kodowanie, a .cer i .crt nie. Więcej szczegółów .
eis
1
Właściwie powinno być odwrotnie. Ale wszystkie te rozszerzenia były mylone przez długi czas, więc nie powinieneś na nich polegać.
Claudio Floreani
16

Odpowiedź na pytanie, jak przekonwertować plik .cer na plik .crt (są one inaczej zakodowane!), Brzmi:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt
Alexander Presber
źródło
5
To nie zadziałało dla mnie! Użyłem:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59
Otrzymuję ten komunikat o błędzie:unable to load PKCS7 object
friederbluemle
@friederbluemle, czy sprawdziłeś tę odpowiedź? serverfault.com/questions/417140/…
Alexander Presber
Oto, co musiałem zrobić, aby przygotować mój certyfikat PositiveSSL do przekonwertowania na PKCS12 do użytku na platformie Azure.
Owen
16

Używam polecenia:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Ale CER to certyfikat X.509 w formie binarnej, zakodowany w DER. CRT to binarny certyfikat X.509 zawarty w kodowaniu tekstowym (base-64).

Z tego powodu może powinieneś użyć:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

A następnie, aby zaimportować swój certyfikat:

Skopiuj swój urząd certyfikacji do katalogu:

/usr/local/share/ca-certificates/

Użyj polecenia:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

Zaktualizuj sklep CA:

sudo update-ca-certificates

Hugo LM
źródło
5

Jeśli twój plik cer ma format binarny, musisz go przekonwertować

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt
Mustafa Burak Kalkan
źródło
3

Pliki .cer i .crt powinny być wymienne, o ile importowane są do magazynu kluczy.

Spójrz na zawartość pliku .cer. Usuń wszystko, co znajduje się przed -----BEGIN CERTIFICATE-----i za -----END CERTIFICATE-----wierszem. Zostaną ci wiersze BEGIN / END z kilkoma elementami zakodowanymi w Base64 między nimi.

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

Następnie po prostu zaimportuj go do swojego pliku kluczy za pomocą narzędzia keytool.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer
Gene Gotimer
źródło
Pomogła mi twoja uwaga na temat kodowania BASE-64. Normalnym certyfikatem jest najwyraźniej specjalne kodowanie i nieczytelny zwykły tekst. Dzięki.
DRapp
-2

Po prostu zrób

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt
Mutuma
źródło
8
Czy chciałbyś wyjaśnić, co dokładnie robi ta linia i dlaczego dokładnie używasz tych parametrów? Ta odpowiedź jest dość krótka i może być trudna do zrozumienia dla osób z mniejszym doświadczeniem.
GameDroids