Jak utworzyć certyfikat SSL z podpisem własnym dla Nginx w Ubuntu

Wstęp

Bezpieczeństwo przesyłania danych pomiędzy serwerem a użytkownikami jest kluczowe, a certyfikat SSL (Secure Sockets Layer) odgrywa tutaj fundamentalną rolę. Działa on na zasadzie szyfrowania informacji, co uniemożliwia osobom niepowołanym ich przechwycenie i odczytanie. Chociaż certyfikaty SSL wystawiane przez centra certyfikacji (CA) są powszechnie uznawane, ich koszt może być znaczący, stąd też popularność zdobywa opcja tworzenia certyfikatów z własnym podpisem.

Niniejszy poradnik szczegółowo opisuje, jak samodzielnie wygenerować certyfikat SSL dla serwera Nginx działającego na systemie Ubuntu. Chociaż tego typu certyfikaty nie zapewniają identycznego poziomu zaufania, co certyfikaty od CA, są niezastąpione w środowiskach testowych lub prywatnych.

Generowanie klucza prywatnego RSA

Pierwszym krokiem jest wygenerowanie klucza prywatnego RSA, który posłuży do szyfrowania danych. Wykorzystaj w tym celu następującą komendę:

openssl genrsa -out private.key 2048

Tworzenie żądania certyfikatu (CSR)

Następny etap to utworzenie żądania podpisania certyfikatu (CSR), które zawiera istotne dane o Twojej organizacji i nazwie domeny. Zrobisz to przy pomocy komendy:

openssl req -new -key private.key -out cert.csr

W trakcie tego procesu zostaniesz poproszony o uzupełnienie poniższych informacji:

  • Nazwa pospolita (CN): Adres domeny, dla której tworzony jest certyfikat (np. example.com)
  • Nazwa organizacji (O): Nazwa Twojej firmy
  • Jednostka organizacyjna (OU): (Opcjonalnie) Wydział w obrębie organizacji
  • Lokalizacja (L): Miasto, w którym znajduje się siedziba firmy
  • Stan (ST): Województwo, region, w którym znajduje się firma
  • Kraj (C): Dwuliterowy kod kraju, w którym zlokalizowana jest firma

Generowanie certyfikatu SSL z podpisem własnym

Posiadając już klucz prywatny oraz CSR, możemy przystąpić do utworzenia certyfikatu SSL z własnym podpisem, wykorzystując komendę:

openssl x509 -req -days 365 -in cert.csr -signkey private.key -out cert.crt

Standardowo certyfikat jest ważny przez 365 dni, jednak ten okres możesz zmienić według własnych potrzeb.

Konfiguracja serwera Nginx

Teraz należy tak skonfigurować Nginx, aby korzystał z wygenerowanego certyfikatu SSL. Otwórz plik konfiguracyjny Nginx (zazwyczaj /etc/nginx/sites-available/example.com) i dodaj poniższy fragment kodu:


server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/private.key;
}

Pamiętaj, aby zastąpić example.com nazwą Twojej domeny, a /path/to/ ścieżką do miejsca, w którym zapisałeś pliki certyfikatu oraz klucza prywatnego.

Sprawdzenie certyfikatu

Ostatnim etapem jest weryfikacja, czy certyfikat SSL został poprawnie wdrożony. Skorzystaj z polecenia:

openssl s_client -connect example.com:443

W odpowiedzi powinny pojawić się informacje podobne do poniższych:


CONNECTED(00000003)
depth=0 C = US, O = Example Organization, CN = example.com
verify return:1
depth=0 C = US, O = Example Organization, CN = example.com
verify return:1
---
Certificate chain
0 s:/CN=example.com/O=Example Organization/C=US
i:/CN=example.com/O=Example Organization/C=US

Jeśli widzisz takie dane, oznacza to, że certyfikat został poprawnie zainstalowany, a Twoja strona jest dostępna przez protokół HTTPS.

Przekierowanie HTTP na HTTPS

Aby nie tracić ruchu z HTTP, zaleca się przekierowanie go na HTTPS. W tym celu w pliku konfiguracyjnym Nginx dodaj następujący fragment:


server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}

Podsumowanie

Stworzenie certyfikatu SSL z podpisem własnym dla serwera Nginx w Ubuntu jest stosunkowo proste. Mimo, że takie certyfikaty nie oferują takiego samego zaufania jak te od CA, sprawdzają się idealnie w środowiskach testowych oraz prywatnych. Pamiętaj o regularnym odnawianiu certyfikatu, aby zagwarantować bezpieczeństwo danych przesyłanych pomiędzy serwerem a użytkownikami.

Najczęściej zadawane pytania (FAQ)

  1. Czym jest certyfikat SSL?
    Certyfikat SSL to cyfrowy certyfikat, którego zadaniem jest szyfrowanie danych przesyłanych między serwerem a przeglądarką, chroniąc je przed przechwyceniem.
  2. Czym jest certyfikat SSL z podpisem własnym?
    To certyfikat wygenerowany samodzielnie, a nie przez zewnętrzny urząd certyfikacji (CA).
  3. Czy certyfikaty SSL z własnym podpisem są bezpieczne?
    Chociaż nie oferują takiego samego poziomu zaufania jak te od CA, są w pełni wystarczające w testach lub sieciach prywatnych.
  4. Jak stworzyć klucz prywatny RSA?
    Wykorzystaj komendę: openssl genrsa -out private.key 2048
  5. Jak utworzyć żądanie certyfikatu (CSR)?
    Użyj komendy: openssl req -new -key private.key -out cert.csr
  6. Jak wygenerować certyfikat SSL z własnym podpisem?
    Skorzystaj z polecenia: openssl x509 -req -days 365 -in cert.csr -signkey private.key -out cert.crt
  7. Jak skonfigurować Nginx do korzystania z certyfikatu SSL?
    Dodaj do pliku konfiguracyjnego Nginx następujące linie:

    server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;
    ssl_certificate /path/to/cert.crt;
    ssl_certificate_key /path/to/private.key;
    }
  8. Jak sprawdzić poprawność instalacji certyfikatu SSL?
    Uruchom komendę: openssl s_client -connect example.com:443
  9. Jak przekierować ruch z HTTP na HTTPS?
    Dodaj poniższy blok do pliku konfiguracyjnego Nginx:

    server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 301 https://$host$request_uri;
    }
  10. Jak często należy odnawiać certyfikat SSL?
    Zaleca się odnawianie certyfikatu przynajmniej raz do roku, aby zachować bezpieczeństwo przesyłanych danych.

Tagi:

  • Certyfikat SSL
  • Nginx
  • Ubuntu
  • Bezpieczeństwo strony
  • Szyfrowanie danych