OpenSSL to otwarta biblioteka kryptograficzna, która zawiera różnorodne polecenia używane w protokole TLS i Infrastrukturze Klucza Publicznego. OpenSSL został wydany w 1998 roku i jest dostępny dla systemów Windows, Linux, macOS i BSD. Polecenie OpenSSL pomoże Ci w wykonywaniu różnych zadań, w tym generowaniu żądań podpisania certyfikatu (CSR), generowaniu kluczy prywatnych oraz certyfikacji SSL.
OpenSSL jest ważny, ponieważ zapewnia prawidłową implementację SSL. Uzyskanie SSL we właściwy sposób ma kluczowe znaczenie dla bezpieczeństwa Twojej witryny. Ponadto Google, będący wiodącą wyszukiwarką, traktuje priorytetowo witryny z wdrożonymi certyfikatami SSL. Niektóre przeglądarki, takie jak Chrome i Firefox, mogą oznaczyć Twoją witrynę jako Niezabezpieczona, jeśli nie posiadasz odpowiedniego certyfikatu SSL. Dlatego niezwykle ważne jest, aby ruch na Twojej stronie odbywał się za pośrednictwem szyfrowanego protokołu HTTPS.
Najważniejsze na początek
Ten samouczek to przewodnik w stylu ściągawki, zawierający niektóre, ale prawdopodobnie nie wszystkie polecenia OpenSSL, których możesz używać w codziennych scenariuszach.
Pierwsza część wyjaśnia wszystko, co musisz wiedzieć o żądaniach podpisania certyfikatu (CSR). Jeśli jednak jesteś już z tym zaznajomiony, możesz przejść do dowolnej innej sekcji związanej z tym, co próbujesz osiągnąć. Każda sekcja zawiera fragment wiersza poleceń pozwalający osiągnąć to, co opisano w podtytule.
Zaczynajmy!
Sekcja 1: Zrozumienie żądań podpisania certyfikatu (CSR)
Żądanie podpisania certyfikatu jest warunkiem wstępnym przy uzyskiwaniu certyfikatu SSL od urzędu certyfikacji (CA). CSR zawiera klucz publiczny pary kluczy oraz pewne dodatkowe informacje. Należy je umieścić w certyfikacie podczas procesu podpisywania.
Podczas generowania CSR zostaniesz poproszony o podanie informacji identyfikacyjnych, znanych jako nazwa wyróżniająca (DN). DN zawiera pola niezbędne dla certyfikatu, takie jak nazwa powszechna (CN), która jest dokładną w pełni kwalifikowaną nazwą domenową (FQDN) hosta, który będzie korzystał z certyfikatu. Pozostałe pola DN służą do podania dodatkowych informacji, takich jak kraj, województwo/stan, miejscowość oraz nazwa organizacji lub firmy, jeśli generujesz certyfikaty specyficzne dla swojej działalności. Możesz pominąć te monity, dostarczając informacje z pliku lub za pośrednictwem wiersza poleceń.
Spójrz na przykład monitu o informacje CSR na poniższym zrzucie ekranu:
|
1 2 3 4 5 6 7 |
Kraj Nazwa (2 literowy kod) [AU]:CH Stan lub Prowincja Nazwa (pełna nazwa) [Some-State]:Zürich Miejscowość Nazwa (np., miasto) []:Old Town Organizacja Nazwa (np., firma) [Internet Widgits Pty Ltd]:Example Cloudsigma Firma Organizacyjna Jednostka Nazwa (np., sekcja) []:Cloud Technology Powszechna Nazwa (e.g. serwer FQDN lub TWÓJ nazwa) []:cloudsigma.com E-mail Adres []:info@cloudsigma.com |
Możesz podać te informacje w jednolinijkowym poleceniu, aby uniknąć monitów, dodając flagę -subj, jak pokazano poniżej, i podając informacje dla poszczególnych pól:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Powyższe polecenie przyjmuje te same informacje, które zostały wyświetlone w przykładowym bloku kodu z monitami o informacje CSR.
Sekcja 2: Generowanie żądań podpisania certyfikatu
W tej sekcji omówimy polecenia OpenSSL, których można użyć do generowania CSR i kluczy prywatnych. Pliki CSR są niezbędne do wnioskowania o certyfikaty SSL od urzędu certyfikacji (CA).
Generowanie klucza prywatnego i żądania podpisania certyfikatu
Możesz użyć tej metody, jeśli chcesz, aby urząd certyfikacji wystawił certyfikat SSL w celu zabezpieczenia Twojego serwera Apache lub Nginx serwer do obsługi ruchu przez HTTPS, tj. HTTP z TLS. CSR wygenerowany za pomocą tego polecenia można wysłać do CA, aby poprosić o certyfikat SSL podpisany przez CA. Możesz postępować zgodnie z naszymi szczegółowymi przewodnikami dotyczącymi konfiguracji Apache lub Nginx serwerów na Ubuntu.
Wprowadź następujące polecenie w terminalu, aby wygenerować 2048-bitowy klucz prywatny (domain.key) i CSR (domain.csr) od zera:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
Odpowiedz na monity, podając określone informacje CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Flaga -newkey rsa:2048 określa, że klucz powinien zostać wygenerowany przy użyciu 2048-bitowego algorytmu RSA. Flaga -nodes wskazuje na brak szyfrowania klucza prywatnego hasłem. Istnieje opcja -new, która nie została dołączona, ale jest domyślna, co oznacza, że generowane jest nowe żądanie CSR.
Generowanie żądania podpisania certyfikatu (CSR) z istniejącego klucza prywatnego
Jeśli masz już klucz prywatny, możesz użyć tej metody do wygenerowania CSR. Następnie użyjesz go do zażądania certyfikatu SSL od CA. Wprowadź następujące polecenie, aby wygenerować nowy CSR (domain.csr) przy użyciu istniejącego klucza prywatnego (domain.key):
|
1 |
openssl req -key domain.key -new -out domain.csr |
Odpowiedz na monity, podając określone informacje CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Flaga -key określa istniejący klucz prywatny (domain.key), który ma zostać użyty do wygenerowania nowego CSR. Flaga -new wskazuje, że generowany jest nowy CSR.
Generowanie żądania podpisania certyfikatu (CSR) z istniejącego certyfikatu i klucza prywatnego
Jeśli masz już istniejący certyfikat, którego chcesz użyć do wygenerowania CSR, możesz skorzystać z tej metody. Metoda ta może być przydatna, jeśli Ty lub Twój urząd certyfikacji (CA) zgubicie oryginalny CSR i musisz go wygenerować przy użyciu wcześniej wprowadzonych informacji CSR, bez konieczności ich ponownego wprowadzania. Polecenie wyodrębnia informacje z istniejącego certyfikatu. Wprowadź następujące polecenie w terminalu, aby utworzyć nowy CSR (domain.csr) przy użyciu istniejącego certyfikatu (domain.crt) i istniejącego klucza prywatnego (domain.key):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
Opcja -x509toreq wskazuje, że używasz certyfikatu X509 do wygenerowania CSR.
Sekcja 3: Generowanie certyfikatów SSL
W niektórych sytuacjach możesz chcieć użyć certyfikatu SSL bez kłopotów związanych z uzyskiwaniem certyfikatu podpisanego przez CA. Ta sekcja wyjaśnia, jak możesz samodzielnie podpisać własne certyfikaty. Jest to prawidłowe i bezpłatne. Certyfikaty te są określane jako certyfikaty samopodpisane, i są one dość powszechne.
Certyfikat samopodpisany jest podpisywany własnym kluczem prywatnym. Zarówno certyfikaty samopodpisane, jak i podpisane przez CA działają równie dobrze w celu szyfrowania danych i ruchu na stronie internetowej. Jednak w przypadku certyfikatów samopodpisanych użytkownicy zazwyczaj otrzymują w swoich przeglądarkach ostrzeżenie, że certyfikat nie jest zaufany. W związku z tym możesz używać certyfikatów samopodpisanych dla stron internetowych, które nie wymieniają poufnych informacji z użytkownikami, lub na serwerach nieprodukcyjnych. Poniżej znajdziesz polecenia OpenSSL, których możesz użyć do wygenerowania certyfikatów samopodpisanych.
- Generowanie certyfikatu samopodpisanego
Możesz użyć tej metody do wygenerowania certyfikatu SSL w celu zabezpieczenia serwera Apache lub Nginx. Zapewni to, że ruch będzie odbywał się przez HTTPS lub HTTP over TLS, bez konieczności zwracania się do CA o podpisanie certyfikatu:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
Odpowiedz na monity, podając szczegółowe informacje o CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Flaga -x509 wskazuje na utworzenie certyfikatu samopodpisanego. Opcja -days 365 określa liczbę dni, przez które certyfikat będzie ważny. W tym przypadku jest to 365 dni. Możesz również wybrać inną liczbę dni. Polecenie generuje tymczasowe CSR w celu przechowywania informacji, które należy powiązać z certyfikatem.
- Generowanie certyfikatu samopodpisanego z istniejącego klucza prywatnego
Ta metoda pomoże Ci wygenerować certyfikat samopodpisany z już istniejącego klucza prywatnego. Wprowadź następujące polecenie, aby wygenerować certyfikat samopodpisany (domain.crt) przy użyciu istniejącego klucza prywatnego (domain.key):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
Podaj w monitach swoje szczegółowe informacje o CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
Flaga -x509 wskazuje na utworzenie certyfikatu samopodpisanego. Opcja -days 365 określa liczbę dni, przez które certyfikat będzie ważny. W tym przypadku jest to 365 dni. Możesz również wybrać inną liczbę dni. Opcja -new inicjuje monit o podanie informacji CSR.
Sekcja 4: Przeglądanie certyfikatów
Certyfikaty i pliki CSR są kodowane i przechowywane z rozszerzeniem .pem. Skrót ten oznacza Privacy-Enhanced Mail. Jest to format pliku służący do przechowywania i przesyłania kluczy kryptograficznych, certyfikatów i innych kluczowych danych. Pliki PEM nie są łatwo czytelne dla ludzi. W tej sekcji znajdziesz polecenia, których możesz użyć do przeglądania wpisów z zakodowanych plików PEM.
- Przeglądanie plików CSR
Wprowadź następujące polecenie, aby wyświetlić i zweryfikować zawartość pliku CSR (domain.csr) w terminalu:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Na przykład powyższe polecenie może zwrócić wynik podobny do tego:

- Przeglądanie wpisów certyfikatu
Wprowadź następujące polecenie, aby wyświetlić zawartość certyfikatu (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
Powyższe polecenie może zwrócić wynik podobny do tego:

- Weryfikacja, czy certyfikat został podpisany przez urząd certyfikacji (CA)
Aby zweryfikować, czy certyfikat (domain.crt) został podpisany przez określony certyfikat CA (ca.crt), wprowadź następujące polecenie:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
Sekcja 5: Klucze prywatne
Jeśli szukasz poleceń OpenSSL niezbędnych do tworzenia i weryfikacji kluczy prywatnych, ta sekcja jest dla Ciebie.
- Tworzenie klucza prywatnego
Aby utworzyć zabezpieczony hasłem 2048-bitowy klucz prywatny (domain.key), wprowadź następujące polecenie w terminalu:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
Polecenie poprosi Cię o podanie hasła w celu zakończenia procesu. Zobacz zrzut ekranu poniżej:

- Weryfikacja klucza prywatnego
Aby zweryfikować ważność klucza prywatnego (domain.key), wprowadź następujące polecenie w terminalu:
|
1 |
openssl rsa -check -in domain.key |
Następnie konieczne będzie podanie hasła. Jeśli klucz prywatny jest zaszyfrowany i wprowadzisz poprawne hasło (passphrase), niezaszyfrowany klucz zostanie wyświetlony w terminalu. Zobacz zrzut ekranu poniżej:

- Weryfikacja zgodności klucza prywatnego z certyfikatem i CSR
Jeśli chcesz sprawdzić, czy klucz prywatny (domain.key) pasuje do certyfikatu (domain.crt) oraz CSR (domain.csr), wprowadź następujące polecenia w terminalu:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
Jeśli zauważysz, że dane wyjściowe powyższych poleceń są identyczne, oznacza to, że klucz prywatny, certyfikat i CSR są ze sobą powiązane.
- Szyfrowanie klucza prywatnego
Jeśli posiadasz niezaszyfrowany klucz prywatny (unencrypted.key) i chcesz uzyskać jego zaszyfrowaną wersję (encrypted.key), wprowadź następujące polecenie w terminalu:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
Polecenie poprosi Cię o podanie hasła (passphrase) w celu zaszyfrowania klucza prywatnego.
- Deszyfrowanie klucza prywatnego
Jeśli posiadasz zaszyfrowany klucz prywatny (encrypted.key) i chcesz uzyskać jego odszyfrowaną wersję (decrypted.key), wprowadź następujące polecenie w terminalu:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
Polecenie poprosi Cię o podanie hasła (passphrase) do zaszyfrowanego klucza. Jeśli wprowadzisz poprawne hasło, zostanie on odszyfrowany. Wynik zostanie zapisany w decrypted.key.
Sekcja 6: Konwersja formatów certyfikatów
Możesz zauważyć, że do tej pory pracowaliśmy z certyfikatami X.509 kodowanymi w formacie ASCII PEM. Choć jest to w zupełności wystarczające, istnieje wiele innych typów kodowania i kontenerów certyfikatów, z których możesz korzystać. W niektórych aplikacjach możesz preferować określone formaty zamiast innych. Co więcej, niektóre formaty mogą zawierać wiele elementów, takich jak klucz prywatny, CSR i certyfikat podpisany przez CA, w jednym pliku. Możesz również użyć OpenSSL do konwersji między różnymi formatami certyfikatów. Czytaj dalej, aby poznać niektóre polecenia OpenSSL służące do konwersji formatów certyfikatów.
- Konwersja PEM na DER
DER (Distinguished Encoding Rules) to kodowanie binarne dla certyfikatów X.509 i kluczy prywatnych. Aby przekonwertować certyfikat zakodowany w formacie PEM (domain.crt) na certyfikat zakodowany w formacie DER (domain.der), wprowadź następujące polecenie:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
Większość przypadków użycia formatu kodowania DER znajdziesz w języku programowania Java. Skorzystaj z tego samouczka, aby szybko skonfigurować Javę na swoim serwerze Ubuntu.
- Konwersja DER na PEM
Aby przekonwertować certyfikat zakodowany w formacie DER (domain.der) na certyfikat PEM (domain.crt), wprowadź następujące polecenie:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- Konwersja PEM na PKCS7
Możesz chcieć dodać certyfikaty PEM, na przykład domain.crt i ca-chain.crt do pliku PKCS7 (domain.p7b). Oto polecenie, które pozwala to osiągnąć:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
Możesz użyć opcji -certfile wielokrotnie, aby określić certyfikaty, które mają zostać dodane do pliku PKCS7. Pliki PKCS7 są najbardziej istotne dla magazynów kluczy Java (Java Key stores) oraz Microsoft IIS. Znane również jako pliki P7B, są to pliki ASCII, które mogą zawierać certyfikaty oraz certyfikaty podpisane przez CA.
- Convert PKCS7 to PEM
Aby przekonwertować plik PKCS7 (domain.p7b) na plik zakodowany w formacie PEM (domain.crt), wprowadź następujące polecenie w terminalu:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- Converting PEM to PKCS12
Aby połączyć klucz prywatny (domain.key) i certyfikat (domain.crt) w PKCS12 plik (domain.pfx), wprowadź następujące polecenie:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
Polecenie poprosi o wprowadzenie haseł eksportu, które opcjonalnie można pozostawić puste. Możesz powiązać wiele certyfikatów z plikiem PKCS12, łącząc certyfikaty w jednym pliku PEM (domain.crt). PKCS12 jest również znany jako PFX i jest najczęściej używany w Microsoft IIS.
- Konwertuj PKCS12 na PEM
Aby przekonwertować plik PKCS12 (domain.pfx) na format zakodowany w PEM (domain.combined.crt), wprowadź następujące polecenie:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
Plik PEM utworzony przez powyższe polecenie zawiera wszystkie elementy, które znajdowały się w pliku PKCS12.
Sekcja 7: Sprawdzanie wersji OpenSSL
Wersja dowolnego uruchomionego oprogramowania może wpływać na możliwości uruchamianych aplikacji. Stąd istnieje potrzeba ustalenia wersji. To samo dotyczy OpenSSL. Niektóre opcje wiersza poleceń mogą być niedostępne w jednej wersji, a dostępne w innej. Aby wyświetlić wersję OpenSSL, którą uruchamiasz, wprowadź następujące polecenie:
|
1 |
openssl version -a |
Poniżej znajduje się wynik, który otrzymaliśmy po uruchomieniu powyższego polecenia podczas tworzenia tego samouczka:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Dec 2020 zbudowano dnia: Sob Gru 19 15:39:47 2020 UTC platforma: linux-x86_64 opcje: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) kompilator: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Inicjowanie źródło: system operacyjny-specyficzne |
Poniżej znajduje się rzeczywisty zrzut ekranu:

Podsumowanie
W tym samouczku wyjaśniliśmy, czym jest OpenSSL, omówiliśmy żądania podpisania certyfikatu (CSR) oraz niektóre z kluczowych poleceń OpenSSL, których można używać w środowisku serwerowym.
Czy brakuje nam jakiegoś kluczowego polecenia, czy też masz problemy z którymkolwiek z poleceń w konfiguracji serwera na CloudSigma? Zachęcamy do kontaktu z naszym zespołem pomocy technicznej 24/7 na czacie w czasie rzeczywistym, aby to omówić.
Miłej pracy!
Komentarze
Brak komentarzy. Bądź pierwszy.