Czy ktoś może mi powiedzieć właściwy sposób / polecenie, aby wyodrębnić / przekonwertować pliki certyfikatu .crt
i klucza prywatnego .key
z .pem
pliku? Właśnie przeczytałem, że są one wymienne, ale nie w jaki sposób.
Czy ktoś może mi powiedzieć właściwy sposób / polecenie, aby wyodrębnić / przekonwertować pliki certyfikatu .crt
i klucza prywatnego .key
z .pem
pliku? Właśnie przeczytałem, że są one wymienne, ale nie w jaki sposób.
Odpowiedzi:
Byłem w stanie przekonwertować pem na crt za pomocą tego:
openssl x509 -outform der -in your-cert.pem -out your-cert.crt
openssl pkey -in mumble.pem -out mumble-key.pem
Jeśli wersja OpenSSL jest starsza niż 1.0.0, wyodrębnij klucz jako klucz RSA:openssl rsa -in mumble.pem -out mumble-key.pem
unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Expecting: ANY PRIVATE KEY
błąd.
Konwersja za pomocą OpenSSL
Te polecenia pozwalają konwertować certyfikaty i klucze na różne formaty, aby były zgodne 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 do DER
openssl x509 -outform der -in certificate.pem -out certificate.der
Konwertuj plik PKCS # 12 (.pfx .p12) zawierający klucz prywatny i certyfikaty do 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 plik certyfikatu PEM i klucz prywatny na 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
Konwerter OpenSSL 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
Wygeneruj klucze rsa przez OpenSSL
Używając OpenSSL w wierszu poleceń, który musisz najpierw wygenerować klucz publiczny i prywatny, powinieneś zabezpieczyć ten plik hasłem za pomocą argumentu -passout, istnieje 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
Spowoduje to utworzenie pliku klucza o nazwie private.pem, który używa 1024 bitów. Ten plik faktycznie ma zarówno klucze prywatny, jak i publiczny, dlatego należy 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
Otrzymasz teraz public.pem zawierający tylko swój klucz publiczny, możesz swobodnie udostępniać go stronom trzecim. Możesz to wszystko przetestować, po prostu szyfrując coś samodzielnie za pomocą klucza publicznego, a następnie odszyfrowując za pomocą klucza prywatnego, najpierw potrzebujemy trochę danych do zaszyfrowania:
Przykładowy plik:
echo 'too many secrets' > file.txt
Masz teraz trochę danych w pliku.txt, pozwalamy je zaszyfrować za pomocą OpenSSL i klucza publicznego:
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
Tworzy to zaszyfrowaną wersję file.txt nazywającą go file.ssl, jeśli spojrzysz na ten plik, to tylko binarne śmieci, nic bardzo przydatnego dla nikogo. Teraz możesz go odszyfrować za pomocą klucza prywatnego:
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
Będziesz teraz mieć niezaszyfrowany plik w decrypted.txt:
cat decrypted.txt
|output -> too many secrets
Opcje NARZĘDZI RSA w OpenSSL
IMIĘ
rsa - narzędzie do przetwarzania klucza RSA
STRESZCZENIE
openssl rsa [-help] [-inform PEM | NET | DER] [-outform PEM | NET | DER] [-in nazwa pliku] [-passin arg] [-out nazwa pliku] [-passout arg] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-silnik silnika]
OPIS
Komenda rsa przetwarza klucze RSA. Można je konwertować między różnymi formularzami i drukować ich elementy. Uwaga: to polecenie używa tradycyjnego formatu zgodnego z SSLeay do szyfrowania klucza prywatnego: nowsze aplikacje powinny używać bezpieczniejszego formatu PKCS # 8 za pomocą narzędzia pkcs8.
OPCJE POLECENIA
-help
Wydrukuj komunikat użytkowania.
-inform DER|NET|PEM
Określa format wejściowy. Opcja DER wykorzystuje zakodowaną w ASN1 formę DER zgodną z formatem PKCS # 1 RSAPrivateKey lub SubjectPublicKeyInfo. Formularz PEM jest formatem domyślnym: składa się z formatu DER base64 zakodowanego z dodatkowymi wierszami nagłówka i stopki. Na wejściu akceptowane są również klucze prywatne w formacie PKCS # 8. Formularz NET to format opisany w sekcji UWAGI.
-outform DER|NET|PEM
Określa format wyjściowy, opcje mają takie samo znaczenie jak opcja -inform.
-in filename
Określa wejściową nazwę pliku, z której ma być odczytany klucz lub standardowe wejście, jeśli ta opcja nie jest określona. Jeśli klucz jest zaszyfrowany, pojawi się monit o podanie hasła.
-passin arg
źródło hasła do pliku wejściowego. Aby uzyskać więcej informacji na temat formatu arg, zobacz sekcję PASE ARGUMENTÓW w openssl.
-out filename
Określa wyjściową nazwę pliku do zapisania klucza lub standardowe wyjście, jeśli ta opcja nie jest określona. Jeśli ustawiono jakiekolwiek opcje szyfrowania, zostanie wyświetlony monit o podanie hasła. Wyjściowa nazwa pliku nie powinna być taka sama jak wejściowa nazwa pliku.
-passout password
źródło hasła do pliku wyjściowego. Aby uzyskać więcej informacji na temat formatu arg, zobacz sekcję PASE ARGUMENTÓW w openssl.
-aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
Te opcje szyfrują klucz prywatny za pomocą określonego szyfru przed wysłaniem go. Zostanie wyświetlony monit o podanie hasła. Jeśli nie podano żadnej z tych opcji, klucz jest zapisywany zwykłym tekstem. Oznacza to, że użycie narzędzia rsa do odczytania zaszyfrowanego klucza bez opcji szyfrowania może być użyte do usunięcia hasła z klucza lub poprzez ustawienie opcji szyfrowania można go użyć do dodania lub zmiany hasła. Tych opcji można używać tylko z plikami wyjściowymi w formacie PEM.
-text
drukuje różne komponenty klucza publicznego lub prywatnego w postaci zwykłego tekstu oprócz wersji kodowanej.
-noout
ta opcja zapobiega wyjściu zakodowanej wersji klucza.
-modulus
ta opcja wypisuje wartość modułu klucza.
-check
ta opcja sprawdza spójność klucza prywatnego RSA.
-pubin
domyślnie klucz prywatny jest odczytywany z pliku wejściowego: przy tej opcji klucz publiczny jest odczytywany.
-pubout
domyślnie jest wyprowadzany klucz prywatny: z tą opcją zostanie wyprowadzony klucz publiczny. Ta opcja jest ustawiana automatycznie, jeśli dane wejściowe są kluczem publicznym.
-RSAPublicKey_in, -RSAPublicKey_out
jak -pubin i -pubout, z wyjątkiem tego, że używany jest format RSAPublicKey.
-engine id
określenie silnika (poprzez jego unikalny ciąg id) spowoduje, że rsa spróbuje uzyskać funkcjonalne odwołanie do określonego silnika, w ten sposób inicjując go w razie potrzeby. Silnik zostanie wówczas 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 wykorzystuje linie nagłówka i stopki:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
Format PEM RSAPublicKey wykorzystuje linie nagłówka i stopki:
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
Formularz NET jest formatem zgodnym ze starszymi serwerami Netscape i plikami .key Microsoft IIS, do szyfrowania używa niesolonego RC4. Nie jest bardzo bezpieczny i dlatego należy go używać tylko w razie potrzeby.
Niektóre nowsze wersje IIS zawierają dodatkowe dane w eksportowanych plikach .key. Aby użyć ich z narzędziem, przejrzyj plik za pomocą edytora binarnego i poszukaj ciągu „klucz prywatny”, a następnie prześledzić z powrotem do sekwencji bajtów 0x30, 0x82 (jest to SEKWENCJA ASN1). Skopiuj wszystkie dane od tego miejsca do innego pliku i użyj ich jako danych wejściowych do narzędzia rsa z opcją -inform NET.
PRZYKŁADY
Aby usunąć hasło z klucza prywatnego RSA:
openssl rsa -in key.pem -out keyout.pem
Aby zaszyfrować klucz prywatny przy użyciu potrójnego DES:
openssl rsa -in key.pem -des3 -out keyout.pem
Aby przekonwertować klucz prywatny z formatu PEM na format DER:
openssl rsa -in key.pem -outform DER -out keyout.der
Aby wydrukować składniki klucza prywatnego na standardowe wyjście:
openssl rsa -in key.pem -text -noout
Aby wydrukować tylko część publiczną klucza prywatnego:
openssl rsa -in key.pem -pubout -out pubkey.pem
Wyjście publicznej części klucza prywatnego w formacie RSAPublicKey:
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
Aby wyodrębnić klucz i certyfikat z pliku pem:
openssl pkey -in foo.pem -out foo.key
Inna metoda wyodrębnienia klucza ...
openssl rsa -in foo.pem -out foo.key
openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert
openssl x509 -in foo.pem -outform DER -out first-cert.der
0. Warunek : openssl
powinien zostać zainstalowany. W systemie Windows, jeśli Git Bash
jest zainstalowany, spróbuj tego! Alternatywne pliki binarne 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
.Crt przechowuje certyfikat .. w formacie pem. Tak więc .pem, chociaż może mieć także inne rzeczy, takie jak csr (żądanie podpisania certyfikatu), klucz prywatny, klucz publiczny lub inne certyfikaty, gdy przechowuje tylko certyfikat, jest tym samym, co .crt.
Pem to plik zakodowany w formacie 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 swobodnie korzystać z niektórych poleceń openssl.
perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem
gdzie == 1 można zmienić na potrzebną sekcję. Oczywiście, jeśli dokładnie znasz wymagany nagłówek i stopkę, a w pliku znajduje się tylko jeden z nich (zwykle tak jest, jeśli przechowujesz tylko certyfikat i klucz), możesz go uprościć:
perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem