Nawróć się.pem to.crt i.klucz

Czy ktoś może mi podać poprawny sposób / polecenie wyodrębnienia / konwersji plików certyfikatu .crt i klucza prywatnego .key z pliku .pem? Właśnie czytałem, że są wymienne, ale nie jak.

Author: Lanbo, 2012-12-05

6 answers

Udało mi się przekonwertować pem na crt używając tego:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt
 587
Author: C.B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-26 11:15:56

Konwersja Za Pomocą OpenSSL

Te polecenia pozwalają konwertować certyfikaty i klucze do różnych formatów, aby były kompatybilne z określonymi typami serwerów lub oprogramowania.

  • Konwertuj plik DER (.crt .cer .der) do PEM

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • Konwertuj plik PEM na DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Konwertuj plik PKCS#12 (.pfx .p12) zawierający klucz prywatny i certyfikaty PEM

    openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
    
    You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
    
  • Konwertuj PEM plik certyfikatu i klucz prywatny do PKCS#12 (.pfx .p12)

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • Konwertuj PEM na CRT (.Plik CRT)

    openssl x509 -outform der -in certificate.pem -out certificate.crt
    

OpenSSL Convert pem

  • Konwertuj PEM na DER

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • Konwertuj PEM na P7B

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • Konwertuj PEM na PFX

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    

OpenSSL Convert DER

  • Konwertuj DER na PEM

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    

OpenSSL Convert P7B

  • Konwertuj P7B na PEM

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • Konwertuj P7B na PFX

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
    openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
    

OpenSSL Convert PFX

  • Konwertuj PFX na PEM

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

Generowanie kluczy rsa przez OpenSSL

  • Używając OpenSSL w wierszu poleceń musisz najpierw wygenerować klucz publiczny i prywatny, powinieneś zabezpieczyć ten plik hasłem używając argumentu-passout, są wiele różnych form, które ten argument może przyjąć, więc zapoznaj się z dokumentacją OpenSSL na ten temat.

    openssl genrsa -out private.pem 1024
    
  • Tworzy to plik klucza o nazwie private.pem, który używa 1024 bitów. Ten plik faktycznie ma zarówno klucze prywatne, jak i publiczne, więc powinieneś wyodrębnić publiczny z tego pliku:

    openssl rsa -in private.pem -out public.pem -outform PEM -pubout
    
    or
    
    openssl rsa -in private.pem -pubout > public.pem
    
    or
    
    openssl rsa -in private.pem -pubout -out public.pem
    

    Będziesz miał teraz publiczne.pem zawierający tylko twój klucz publiczny, możesz swobodnie udostępniać go stronom trzecim. Możesz przetestować to wszystko, po prostu szyfrując coś jeśli używasz klucza publicznego, a następnie odszyfrowujesz go za pomocą klucza prywatnego, najpierw potrzebujemy trochę danych do zaszyfrowania.]}

  • Przykładowy plik:

    echo 'too many secrets' > file.txt
    
  • Masz teraz pewne dane w pliku.txt, pozwala zaszyfrować go za pomocą OpenSSL i klucz publiczny:

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • Tworzy to zaszyfrowaną wersję pliku.txt nazywa to plikiem.ssl, jeśli patrzysz na ten plik to po prostu binarne śmieci, nic bardzo przydatnego do ktokolwiek. Teraz możesz odszyfrować go za pomocą klucz prywatny:

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • Będziesz miał teraz niezaszyfrowany plik w odszyfrowanym.txt:

    cat decrypted.txt
    |output -> too many secrets
    

Opcje narzędzi RSA w OpenSSL

  • Nazwa

    RSA-narzędzie do przetwarzania kluczy RSA

  • SYNOPSIS

    Openssl RSA [-help] [- inform PEM / NET / DER] [- outform PEM / NET / DER] [- in filename] [- passin arg] [- out filename] [- passout arg] [- aes128] [- aes192] [- AES256] [-camellia128] [- camellia192] [- camellia256] [- des] [- des3] [- idea] [- text] [- noout] [- modulus] [- check] [- pubin] [- pubout] [- RSAPublicKey_in] [- rsapublickey_out] [- engine id]

  • Opis

    Polecenie RSA przetwarza klucze RSA. Mogą być konwertowane między różnymi formularzami i ich komponentami wydrukowanymi. Uwaga To polecenie używa tradycyjnego formatu zgodnego z SSLeay do szyfrowania klucza prywatnego: nowsze aplikacje powinny użyj bezpieczniejszego formatu PKCS # 8 za pomocą narzędzia pkcs8.

  • OPCJE POLECEŃ

    -help
    

    Wydrukuj wiadomość o użyciu.

    -inform DER|NET|PEM
    

    Określa format wejściowy. Opcja DER używa zakodowanej postaci ASN1 DER zgodnej z formatem PKCS#1 rsaprivatekey lub SubjectPublicKeyInfo. Formularz PEM jest formatem domyślnym: składa się z formatu DER base64 zakodowanego z dodatkowymi liniami nagłówka i stopki. On wejściowe klucze prywatne w formacie PKCS#8 są również akceptowane. Formularz netto jest formatem opisanym w sekcji Notatki.

    -outform DER|NET|PEM
    

    Określa format wyjściowy, opcje mają takie samo znaczenie jak opcja-inform.

    -in filename
    

    Określa nazwę pliku wejściowego do odczytu klucza lub standardowe wejście, jeśli ta opcja nie jest określona. Jeśli klucz jest zaszyfrowany, zostanie wyświetlony monit o podanie hasła.

    -passin arg
    

    Plik wejściowy źródło hasła. Więcej informacji na temat formatu arg można znaleźć w sekcji PASS PHRASE ARGUMENTS w OpenSSL.

    -out filename
    

    Określa nazwę pliku wyjściowego do zapisu klucza lub standardowe wyjście, jeśli ta opcja nie jest określona. Jeśli ustawione są opcje szyfrowania, zostanie wyświetlony monit o podanie hasła. Nazwa pliku wyjściowego nie powinna być taka sama jak nazwa pliku wejściowego.

    -passout password
    

    Źródło hasła pliku wyjściowego. Więcej informacji na temat format arg patrz sekcja pass PHRASE ARGUMENTS w OpenSSL.

    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
    

    Te opcje szyfrują klucz prywatny za pomocą podanego szyfru przed jego wysłaniem. Szukana fraza to: Jeśli żadna z tych opcji nie jest podana, klucz jest zapisywany zwykłym tekstem. Oznacza to, że za pomocą narzędzia RSA do odczytu w zaszyfrowanym kluczu bez opcji szyfrowania można usunąć frazę pass z klucza lub ustawiając opcje szyfrowania można jej użyć do dodania lub Zmień hasło. Te opcje mogą być używane tylko z plikami wyjściowymi w formacie PEM.

    -text
    

    Wypisuje różne komponenty klucza publicznego lub prywatnego w postaci zwykłego tekstu oprócz zakodowanej wersji.

    -noout
    

    Ta opcja uniemożliwia wyjście zakodowanej wersji klucza.

    -modulus
    

    Ta opcja wyświetla wartość modułu klucza.

    -check
    

    Ta opcja sprawdza spójność klucza prywatnego RSA.

    -pubin
    

    Domyślnie klucz prywatny jest odczytywany z pliku wejściowego: za pomocą tej opcji jest odczytywany klucz publiczny.

    -pubout
    

    Domyślnie kluczem prywatnym jest output: z tą opcją klucz publiczny będzie output. Ta opcja jest ustawiana automatycznie, jeśli wejście jest kluczem publicznym.

    -RSAPublicKey_in, -RSAPublicKey_out
    

    Jak-pubin i-pubout z wyjątkiem formatu RSAPublicKey jest używany zamiast tego.

    -engine id
    

    Podanie silnika (przez jego unikalny ciąg id) spowoduje, że rsa spróbuje uzyskać odniesienie funkcjonalne do podanego silnika, inicjując je w razie potrzeby. Silnik zostanie wtedy ustawiony jako domyślny dla wszystkich dostępnych algorytmów.

  • Uwagi

    Format klucza prywatnego PEM wykorzystuje linie nagłówka i stopki:
    -----BEGIN RSA PRIVATE KEY-----
    
    -----END RSA PRIVATE KEY-----
    

    Format klucza publicznego PEM używa nagłówka i stopki linie:

    -----BEGIN PUBLIC KEY-----
    
    -----END PUBLIC KEY-----
    
    Format PEM rsapublickey wykorzystuje linie nagłówka i stopki:
    -----BEGIN RSA PUBLIC KEY-----
    
    -----END RSA PUBLIC KEY-----
    
    NET form jest formatem kompatybilnym ze starszymi serwerami Netscape i Microsoft IIS .kluczowe pliki, To używa unsalted RC4 do jego szyfrowania. Nie jest bardzo bezpieczny i dlatego należy go używać tylko wtedy, gdy jest to konieczne.

    Niektóre nowsze wersje usług IIS mają dodatkowe dane w wyeksportowanym pliku .kluczowe pliki. Aby użyć ich z narzędziem, przejrzyj plik za pomocą edytora binarnego i poszukaj łańcuch "private-key", następnie następuje powrót do sekwencji bajtów 0x30 ,0X82 (jest to sekwencja ASN1). Skopiuj wszystkie dane od tego momentu do innego pliku i użyj ich jako danych wejściowych do narzędzia RSA z opcją-inform NET.

    Przykłady

    Aby usunąć frazę pass w prywatnym kluczu RSA:]}
     openssl rsa -in key.pem -out keyout.pem
    
    Aby zaszyfrować klucz prywatny za pomocą potrójnego DES:]}
     openssl rsa -in key.pem -des3 -out keyout.pem
    

    Aby przekonwertować klucz prywatny z formatu pem do formatu DER:

      openssl rsa -in key.pem -outform DER -out keyout.der
    

    Do wydruku z komponentów klucza prywatnego do standardowego wyjścia:

      openssl rsa -in key.pem -text -noout
    
    Aby po prostu wypisać publiczną część klucza prywatnego:]}
      openssl rsa -in key.pem -pubout -out pubkey.pem
    

    Wypisuje publiczną część klucza prywatnego w formacie RSAPublicKey:

      openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    
 456
Author: evergreen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-25 19:07:55

Aby wyodrębnić klucz i cert z pliku pem:

Klucz wyciągu

openssl pkey -in foo.pem -out foo.key

Kolejna metoda wydobycia klucza...

openssl rsa -in foo.pem -out foo.key

Wyodrębnij wszystkie certy, łącznie z łańcuchem CA

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert

Wyodrębnij tekstowo pierwszy cert jako DER

openssl x509 -in foo.pem -outform DER -out first-cert.der
 55
Author: Highway of Life,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-17 00:46:53

0. Warunek wstępny: openssl powinien być zainstalowany. W systemie Windows, Jeśli Git Bash jest zainstalowany, spróbuj tego! Alternatywne binaria można znaleźć tutaj.

1. Wyciąg .key z .pem:

openssl pkey -in cert.pem -out cert.key

2. Wyciąg .crt z .pem:

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt
 20
Author: Saikat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-19 05:38:09

Jeśli zadałeś to pytanie, ponieważ używasz mkcert, sztuczka polega na tym, że plik .pem jest cert, a plik -key.pem jest kluczem.

(nie musisz konwertować, po prostu uruchom mkcert yourdomain.dev otherdomain.dev)

 2
Author: Barney Szabolcs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-08 10:13:21

A .crt przechowuje certyfikat.. w formacie pem. A .pem, chociaż może mieć również inne rzeczy, takie jak csr( żądanie podpisania certyfikatu), klucz prywatny, klucz publiczny lub inne certy, gdy przechowuje tylko cert, jest to to samo co .crt.

Pem to zakodowany plik bazowy 64 z nagłówkiem i stopką między każdą sekcją.

Aby wyodrębnić konkretną sekcję, skrypt Perla, taki jak poniżej, jest całkowicie poprawny, ale możesz używać niektórych z OpenSSL polecenia.

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

Gdzie = = 1 można zmienić do jakiej sekcji potrzebujesz. Oczywiście, jeśli dokładnie znasz wymagany nagłówek i stopkę, a w pliku jest tylko jeden z nich (zwykle ma to miejsce, jeśli trzymasz w nim tylko cert i klucz), możesz to uprościć:

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem
 1
Author: Gerard ONeill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-06 01:30:19