Jak stworzyć samodzielnie podpisany certyfikat SSL na Ubuntu?
Bezpieczeństwo witryn internetowych i serwerów to jeden z kluczowych elementów funkcjonowania współczesnych usług w sieci. Certyfikaty SSL pozwalają na szyfrowanie komunikacji między użytkownikiem a serwerem, zwiększając bezpieczeństwo przesyłanych danych. Choć w produkcyjnych środowiskach zaleca się korzystanie z certyfikatów SSL od zaufanych dostawców (np. Let’s Encrypt), w celach testowych czy dla lokalnych środowisk można stworzyć samodzielnie podpisany certyfikat SSL. W tym artykule dowiesz się, jak to zrobić na systemie Ubuntu.
Co to jest samodzielnie podpisany certyfikat SSL?
Samodzielnie podpisany certyfikat SSL to taki, który jest generowany i podpisywany przez właściciela serwera, a nie przez zaufane centrum certyfikacji (CA). Dzięki niemu można szyfrować połączenia, ale przeglądarki będą ostrzegały, że certyfikat nie pochodzi od zaufanego wystawcy. Takie certyfikaty sprawdzają się w:
- środowiskach testowych,
- serwerach lokalnych,
- sytuacjach, gdzie zaufanie wystawcy certyfikatu nie jest kluczowe.

Krok 1: Wymagania wstępne
Aby stworzyć samodzielnie podpisany certyfikat SSL na Ubuntu, potrzebujesz:
- Serwera z systemem Ubuntu (np. Ubuntu 20.04 lub Ubuntu 22.04).
- Uprawnień administratora (root lub sudo).
- Zainstalowanego pakietu OpenSSL.
Zaktualizuj pakiety i upewnij się, że OpenSSL jest zainstalowany:
sudo apt update
sudo apt upgrade -y
sudo apt install openssl -y
Krok 2: Tworzenie samodzielnie podpisanego certyfikatu
2.1 Wygenerowanie klucza prywatnego
Pierwszym krokiem jest wygenerowanie klucza prywatnego, który będzie używany do podpisywania certyfikatu SSL. Wykonaj poniższe polecenie:
openssl genrsa -out cert-key.pem 2048
- cert-key.pem to nazwa pliku z kluczem prywatnym.
- Liczba 2048 oznacza długość klucza w bitach (zaleca się co najmniej 2048).
2.2 Tworzenie żądania podpisania certyfikatu (CSR)
Następnie musisz stworzyć CSR (Certificate Signing Request), który zawiera dane o certyfikacie:
openssl req -new -key cert-key.pem -out cert-csr.pem
Podczas tworzenia CSR zostaniesz poproszony o podanie kilku informacji:
- Country Name (2-letter code) – np. PL (Polska).
- State or Province Name – województwo.
- Locality Name – miasto.
- Organization Name – nazwa organizacji.
- Organizational Unit Name – dział organizacji.
- Common Name – domena, dla której wystawiany jest certyfikat (np.
example.com
lub adres IP). - Email Address – Twój e-mail.
Pozostałe pola możesz pozostawić puste, naciskając Enter.
2.3 Tworzenie certyfikatu SSL
Ostatnim krokiem jest stworzenie certyfikatu SSL, który będzie ważny przez określoną liczbę dni (np. 365 dni):
openssl x509 -req -days 365 -in cert-csr.pem -signkey cert-key.pem -out cert.pem
- cert.pem to plik certyfikatu SSL.
- -days 365 oznacza, że certyfikat będzie ważny przez 1 rok.
Po zakończeniu tego kroku będziesz mieć dwa pliki:
- cert-key.pem – klucz prywatny.
- cert.pem – samodzielnie podpisany certyfikat SSL.
Krok 3: Instalacja certyfikatu SSL na serwerze
W zależności od używanego serwera WWW (np. Apache lub Nginx) należy odpowiednio skonfigurować certyfikat SSL.
3.1 Instalacja na serwerze Apache
Jeśli korzystasz z Apache, edytuj plik wirtualnego hosta HTTPS:
sudo nano /etc/apache2/sites-available/default-ssl.conf
Upewnij się, że poniższe linie wskazują na wygenerowane pliki:
SSLEngine on
SSLCertificateFile /ścieżka/do/cert.pem
SSLCertificateKeyFile /ścieżka/do/cert-key.pem
Zapisz zmiany, a następnie włącz obsługę SSL i witrynę:
sudo a2enmod ssl
sudo a2ensite default-ssl.conf
sudo systemctl reload apache2
3.2 Instalacja na serwerze Nginx
Jeśli korzystasz z Nginx, edytuj plik konfiguracji serwera:
sudo nano /etc/nginx/sites-available/default
Dodaj lub zmodyfikuj sekcję dla HTTPS:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /ścieżka/do/cert.pem;
ssl_certificate_key /ścieżka/do/cert-key.pem;
location / {
root /var/www/html;
index index.html;
}
}
Zapisz zmiany i zrestartuj Nginx:
sudo systemctl reload nginx
Krok 4: Testowanie certyfikatu
Otwórz przeglądarkę i przejdź pod adres serwera (np. https://example.com
). Powinieneś zobaczyć ostrzeżenie o niezaufanym certyfikacie – to normalne w przypadku certyfikatów samodzielnie podpisanych.
Krok 5: Przechowywanie klucza i certyfikatu
Ze względów bezpieczeństwa zadbaj o odpowiednie przechowywanie plików:
- Klucz prywatny (cert-key.pem) powinien być dostępny wyłącznie dla użytkownika root:
sudo chmod 600 cert-key.pem
Podsumowanie
Samodzielnie podpisany certyfikat SSL to szybkie i łatwe rozwiązanie dla środowisk testowych oraz lokalnych serwerów. W powyższym przewodniku dowiedziałeś się, jak krok po kroku stworzyć taki certyfikat na systemie Ubuntu, skonfigurować go na serwerach Apache lub Nginx oraz przetestować jego działanie.
Pamiętaj, że w środowiskach produkcyjnych zaleca się użycie certyfikatów SSL od zaufanych dostawców, takich jak Let’s Encrypt, aby uniknąć ostrzeżeń przeglądarki i zapewnić pełne zaufanie użytkowników.