Powrót do bloga

Podstawy OpenSSL: Praca z kluczami prywatnymi, żądaniami podpisania certyfikatów i certyfikatami SSL

Podstawy OpenSSL: Praca z kluczami prywatnymi, żądaniami podpisania certyfikatów i certyfikatami SSL

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:

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:

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:

Odpowiedz na monity, podając określone informacje CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:

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):

Odpowiedz na monity, podając określone informacje CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:

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):

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:

Odpowiedz na monity, podając szczegółowe informacje o CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:

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):

Podaj w monitach swoje szczegółowe informacje o CSR. Opcjonalnie możesz dodać flagę -subj do polecenia, aby uniknąć monitów:

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:

Na przykład powyższe polecenie może zwrócić wynik podobny do tego:

Viewing CSR files

  • Przeglądanie wpisów certyfikatu

Wprowadź następujące polecenie, aby wyświetlić zawartość certyfikatu (domain.crt):

Powyższe polecenie może zwrócić wynik podobny do tego:

OpenSSL

  • 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:

 

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:

Polecenie poprosi Cię o podanie hasła w celu zakończenia procesu. Zobacz zrzut ekranu poniżej:

Creating a Private Key

  • Weryfikacja klucza prywatnego

Aby zweryfikować ważność klucza prywatnego (domain.key), wprowadź następujące polecenie w terminalu:

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:

Verifying a Private Key

  • 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:

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:

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:

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:

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:

 

  • 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ąć:

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:

 

  • 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:

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:

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:

Poniżej znajduje się wynik, który otrzymaliśmy po uruchomieniu powyższego polecenia podczas tworzenia tego samouczka:

Poniżej znajduje się rzeczywisty zrzut ekranu:

OpenSSL

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!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.