Blog CrtMgr - Zarządzanie Certyfikatami SSL/TLS

Eksperckie wskazówki dotyczące zarządzania certyfikatami SSL/TLS, rodzajów certyfikatów, wdrażania i najlepszych praktyk

Jak Zainstalować Certyfikat SSL na Serwerze Nginx

Nginx SSL TLS Serwer WWW Przewodnik Instalacji

Nginx jest jednym z najpopularniejszych serwerów webowych, obsługującym miliony stron internetowych na całym świecie. Ten przewodnik przeprowadzi Cię przez proces instalacji certyfikatów SSL/TLS na Nginx, od pozyskania certyfikatów po optymalną konfigurację.

Wymagania Wstępne

Przed rozpoczęciem upewnij się, że posiadasz:

  • Dostęp root lub sudo do serwera
  • Zainstalowany i działający Nginx
  • Nazwę domeny wskazującą na Twój serwer
  • Podstawową znajomość wiersza poleceń

Sprawdź wersję Nginx:

nginx -v

Metoda 1: Instalacja Certyfikatu Let’s Encrypt z Certbot

Let’s Encrypt zapewnia darmowe certyfikaty SSL z automatycznym odnawianiem. To zalecane podejście dla większości stron internetowych.

Krok 1: Instalacja Certbot

Ubuntu/Debian:

sudo apt update
sudo apt install certbot python3-certbot-nginx

CentOS/RHEL:

sudo yum install certbot python3-certbot-nginx

Fedora:

sudo dnf install certbot python3-certbot-nginx

Krok 2: Pozyskanie Certyfikatu

Certbot może automatycznie skonfigurować Nginx:

sudo certbot --nginx -d example.com -d www.example.com

Postępuj zgodnie z instrukcjami:

  • Wprowadź adres e-mail (do powiadomień o odnowieniu)
  • Zaakceptuj Warunki Użytkowania
  • Zdecyduj, czy przekierowywać HTTP na HTTPS (zalecane)

Certbot:

  • Zweryfikuje własność domeny
  • Pozyska certyfikat
  • Zaktualizuje konfigurację Nginx
  • Przeładuje Nginx

Krok 3: Testowanie Automatycznego Odnawiania

Certyfikaty Let’s Encrypt wygasają po 90 dniach. Certbot konfiguruje automatyczne odnawianie:

# Testowanie procesu odnawiania
sudo certbot renew --dry-run

# Sprawdzenie timera odnawiania (systemd)
sudo systemctl status certbot.timer

Krok 4: Weryfikacja Instalacji

Odwiedź swoją stronę używając https://:

# Testowanie konfiguracji SSL
curl -I https://example.com

# Sprawdzenie szczegółów certyfikatu
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

Metoda 2: Instalacja Komercyjnego Certyfikatu SSL

Jeśli zakupiłeś certyfikat SSL od komercyjnego CA (DigiCert, GlobalSign, Sectigo, itp.), wykonaj te kroki.

Krok 1: Generowanie Żądania Podpisania Certyfikatu (CSR)

Utwórz klucz prywatny i CSR:

# Generowanie klucza prywatnego (RSA 2048-bit)
sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048

# Zabezpieczenie klucza prywatnego
sudo chmod 600 /etc/ssl/private/example.com.key

# Generowanie CSR
sudo openssl req -new -key /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.csr

Podczas generowania CSR podaj:

  • Kod Kraju: Dwuliterowy kod kraju (np. US, GB, PL)
  • Stan/Województwo: Pełna nazwa (np. California, Mazowieckie)
  • Miasto: Pełna nazwa miasta
  • Nazwa Organizacji: Nazwa Twojej firmy
  • Jednostka Organizacyjna: Dział (opcjonalne)
  • Common Name: Twoja domena (np. example.com)
  • Adres E-mail: E-mail kontaktowy

Krok 2: Przesłanie CSR do Urzędu Certyfikacji

  1. Skopiuj zawartość CSR:
cat /etc/ssl/certs/example.com.csr
  1. Wklej do formularza żądania certyfikatu CA
  2. Ukończ walidację domeny (e-mail, DNS lub plikową)
  3. Pobierz wydany certyfikat i certyfikaty pośrednie

Krok 3: Instalacja Plików Certyfikatu

Prześlij pliki certyfikatu na serwer:

# Główny certyfikat
sudo nano /etc/ssl/certs/example.com.crt

# Certyfikaty pośrednie (łańcuch)
sudo nano /etc/ssl/certs/example.com-chain.crt

# Lub połącz je w jeden plik
cat example.com.crt example.com-chain.crt > example.com-fullchain.crt
sudo mv example.com-fullchain.crt /etc/ssl/certs/

Ustaw odpowiednie uprawnienia:

sudo chmod 644 /etc/ssl/certs/example.com*.crt
sudo chmod 600 /etc/ssl/private/example.com.key

Konfiguracja Nginx dla SSL

Podstawowa Konfiguracja SSL

Edytuj konfigurację strony Nginx:

sudo nano /etc/nginx/sites-available/example.com

Dodaj konfigurację SSL:

server {
    listen 80;
    server_name example.com www.example.com;
    
    # Przekieruj cały HTTP na HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    
    # Ścieżki certyfikatu SSL
    ssl_certificate /etc/ssl/certs/example.com-fullchain.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    
    # Konfiguracja SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    
    # Sesja SSL
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;
    
    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/certs/example.com-chain.crt;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    
    # Nagłówki Bezpieczeństwa
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    
    # Konfiguracja aplikacji
    root /var/www/example.com;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

Testowanie Konfiguracji

Przed restartem Nginx, przetestuj konfigurację:

sudo nginx -t

Jeśli sukces, przeładuj Nginx:

sudo systemctl reload nginx

Optymalna Konfiguracja SSL w Nginx

Silne Ustawienia SSL

Dla maksymalnego bezpieczeństwa (ocena A+ na SSL Labs):

# Nowoczesna konfiguracja (obsługuje tylko TLS 1.2 i 1.3)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

# Parametr Diffie-Hellman dla szyfrów DHE
ssl_dhparam /etc/ssl/certs/dhparam.pem;

# HSTS (wymuszaj HTTPS przez 1 rok, włącznie z subdomenami)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Generowanie parametrów DH (to zajmuje czas):

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Optymalizacja Wydajności

# Wznowienie Sesji SSL
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# Włącz HTTP/2
listen 443 ssl http2;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/certs/chain.pem;

Rozwiązywanie Typowych Problemów

Problemy z Łańcuchem Certyfikatów

Problem: Przeglądarka pokazuje “Niekompletny łańcuch certyfikatów”

Rozwiązanie: Dołącz certyfikaty pośrednie:

# Połącz certyfikat i łańcuch
cat certificate.crt intermediate.crt > fullchain.crt

# Lub użyj pliku bundle od CA
ssl_certificate /etc/ssl/certs/fullchain.crt;

Ostrzeżenia o Mieszanej Zawartości

Problem: Strona załadowana przez HTTPS zawiera zasoby HTTP

Rozwiązanie: Zaktualizuj wszystkie URL-e aby używały HTTPS:

<!-- Źle -->
<script src="http://example.com/script.js"></script>

<!-- Dobrze -->
<script src="https://example.com/script.js"></script>

<!-- Też dobrze (względny protokół) -->
<script src="//example.com/script.js"></script>

ERR_SSL_PROTOCOL_ERROR

Problem: Przeglądarka nie może nawiązać połączenia SSL

Rozwiązania:

  1. Sprawdź czy Nginx nasłuchuje na porcie 443
  2. Zweryfikuj czy firewall zezwala na port 443
  3. Przetestuj konfigurację SSL: nginx -t
  4. Sprawdź czy ścieżki certyfikatów są poprawne
# Sprawdź czy Nginx nasłuchuje na 443
sudo netstat -tlnp | grep :443

# Testuj firewall
sudo ufw status
sudo ufw allow 443/tcp

# Sprawdź czy pliki certyfikatów istnieją
ls -la /etc/ssl/certs/example.com*
ls -la /etc/ssl/private/example.com.key

Najlepsze Praktyki Bezpieczeństwa

  1. Zabezpiecz Klucze Prywatne

    • Używaj restrykcyjnych uprawnień (600)
    • Nigdy nie commituj do kontroli wersji
    • Rozważ moduły sprzętowe bezpieczeństwa (HSM) dla wrażliwych aplikacji
  2. Regularne Aktualizacje

    • Utrzymuj Nginx zaktualizowany
    • Aktualizuj konfigurację SSL/TLS zgodnie z ewolucją standardów
    • Monitoruj komunikaty bezpieczeństwa
  3. Używaj Silnych Protokołów

    • Wyłącz SSLv3, TLS 1.0, TLS 1.1
    • Włącz tylko TLS 1.2 i TLS 1.3
    • Używaj silnych zestawów szyfrów
  4. Włącz HSTS

    • Wymuszaj połączenia HTTPS
    • Zapobiegaj atakom obniżenia protokołu
    • Rozważ listę preload HSTS
  5. Monitoruj Wygasanie Certyfikatów

    • Używaj narzędzi monitoringu jak CrtMgr
    • Konfiguruj alerty odnowienia
    • Regularnie testuj procesy odnowienia

Testowanie Konfiguracji SSL

Narzędzia Online

Testowanie Linii Poleceń

# Testuj połączenie SSL
openssl s_client -connect example.com:443 -servername example.com

# Sprawdź łańcuch certyfikatów
openssl s_client -connect example.com:443 -servername example.com -showcerts

# Testuj konkretną wersję TLS
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3

# Sprawdź OCSP stapling
openssl s_client -connect example.com:443 -status

Podsumowanie

Instalacja certyfikatów SSL na Nginx jest prosta, niezależnie od tego, czy używasz darmowych certyfikatów Let’s Encrypt, czy komercyjnych. Kluczowe punkty do zapamiętania:

  • Używaj Certbot dla Let’s Encrypt (najłatwiejsza metoda)
  • Przestrzegaj najlepszych praktyk bezpieczeństwa dla konfiguracji
  • Włącz HTTP/2 dla lepszej wydajności
  • Skonfiguruj właściwe monitorowanie wygasania certyfikatów
  • Przetestuj konfigurację z SSL Labs

Przy właściwej konfiguracji SSL, Twój serwer Nginx będzie zapewniał bezpieczne, szybkie połączenia HTTPS użytkownikom. Używaj narzędzi takich jak CrtMgr do monitorowania certyfikatów i upewnienia się, że nigdy nie wygasną nieoczekiwanie.

Related Articles