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

Rozwiązywanie Problemów SSL/TLS - Praktyczny Przewodnik

SSL TLS Troubleshooting Certyfikaty HTTPS

Problemy z certyfikatami SSL/TLS mogą sparaliżować aplikację w mgnieniu oka. Ten przewodnik pomoże Ci szybko zdiagnozować i naprawić najczęstsze błędy certyfikatów.

Narzędzia Diagnostyczne

OpenSSL - Podstawowe Narzędzie

# Sprawdź certyfikat
openssl s_client -connect example.com:443 -showcerts

# Data wygaśnięcia
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

# Szczegóły certyfikatu  
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text

Testssl.sh - Kompleksowa Analiza

# Instalacja
git clone https://github.com/drwetter/testssl.sh.git
cd testssl.sh

# Test
./testssl.sh example.com

Problem 1: Certyfikat Wygasł

Objawy: NET::ERR_CERT_DATE_INVALID

Diagnoza:

openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

Rozwiązanie:

# Let's Encrypt
certbot renew
systemctl reload nginx

# Automatyczne odnowienie
echo "0 3 * * * certbot renew --quiet" | crontab -

Problem 2: Niekompletny Łańcuch Certyfikatów

Objawy: unable to get local issuer certificate

Diagnoza:

openssl s_client -connect example.com:443 -showcerts
# Powinieneś zobaczyć certyfikat + intermediate + root

Rozwiązanie Nginx:

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;  # fullchain!
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Ręczne tworzenie fullchain:

cat your-cert.crt intermediate.crt > fullchain.crt

Problem 3: Hostname Mismatch

Objawy: NET::ERR_CERT_COMMON_NAME_INVALID

Diagnoza:

openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text | grep -A2 "Subject Alternative Name"

Rozwiązanie:

# Dodaj wszystkie domeny do certyfikatu
certbot certonly --nginx -d example.com -d www.example.com -d api.example.com

Problem 4: Mixed Content

Objawy: Mixed Content Warning w konsoli przeglądarki

Diagnoza:

curl -s https://example.com | grep -o 'http://[^"]*'

Rozwiązanie Nginx:

add_header Content-Security-Policy "upgrade-insecure-requests;" always;

Rozwiązanie w kodzie:

<!-- Zamiast http:// użyj // -->
<img src="//example.com/image.jpg">

Problem 5: Self-Signed Certificate

Objawy: NET::ERR_CERT_AUTHORITY_INVALID

Diagnoza:

openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -issuer -subject
# issuer == subject? To self-signed!

Rozwiązanie dla produkcji:

# Zamień na Let's Encrypt
certbot certonly --nginx -d example.com

Problem 6: TLS Version Mismatch

Objawy: ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Diagnoza:

nmap --script ssl-enum-ciphers -p 443 example.com

Rozwiązanie Nginx:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

Problem 7: Port 443 Zablokowany

Objawy: Timeout, connection refused

Diagnoza:

# Test połączenia
telnet example.com 443
nc -zv example.com 443

# Sprawdź firewall
sudo iptables -L -n | grep 443

Rozwiązanie:

# Otwórz port 443
sudo ufw allow 443/tcp
sudo firewall-cmd --permanent --add-service=https

Problem 8: SNI Issues

Objawy: Niewłaściwy certyfikat dla domeny

Diagnoza:

# Test z SNI
openssl s_client -connect example.com:443 -servername example.com

# Test bez SNI
openssl s_client -connect example.com:443 -noservername

Rozwiązanie Nginx:

# Każda domena potrzebuje własnego bloku server
server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;
}

Problem 9: OCSP Stapling Issues

Diagnoza:

openssl s_client -connect example.com:443 -status 2>/dev/null | grep -A 17 "OCSP response"

Rozwiązanie Nginx:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 10s;

Problem 10: Certificate Revoked

Objawy: NET::ERR_CERT_REVOKED

Diagnoza:

openssl ocsp -issuer chain.pem -cert cert.pem -url http://ocsp.example.com

Rozwiązanie: Certyfikat został unieważniony - musisz uzyskać nowy:

# Wygeneruj nowy klucz!
openssl genrsa -out new-key.pem 2048

# Uzyskaj nowy certyfikat
certbot certonly --nginx -d example.com --force-renewal

Quick Troubleshooting Checklist

  1. Data wygaśnięcia - czy certyfikat nie wygasł?
  2. Łańcuch certyfikatów - czy używasz fullchain?
  3. Hostname - czy domena jest w SAN?
  4. Wystawca - czy CA jest zaufany?
  5. TLS version - czy wspierasz TLS 1.2+?
  6. Port 443 - czy jest otwarty?
  7. DNS - czy domena wskazuje na właściwy IP?
  8. Logi serwera - co mówią error logi?

Narzędzia Online

Monitoring i Prewencja

Najlepszą strategią jest nie dopuszczać do problemów:

# Script monitorujący
#!/bin/bash
DOMAIN="example.com"
DAYS_LEFT=$(echo | openssl s_client -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -checkend $((30*86400)))
if [ $? -ne 0 ]; then
  echo "Certificate expires soon!" | mail -s "SSL Alert" [email protected]
fi

Lub użyj dedykowanego narzędzia jak CrtMgr, które automatycznie monitoruje certyfikaty i wysyła alerty przed wygaśnięciem.

Podsumowanie

Większość problemów z SSL/TLS to:

  • Wygasłe certyfikaty (automatyzuj odnowienia!)
  • Niekompletny łańcuch (używaj fullchain)
  • Hostname mismatch (dodaj wszystkie domeny do SAN)
  • Mixed content (CSP: upgrade-insecure-requests)

Z odpowiednimi narzędziami i monitoring większość problemów można wykryć i naprawić w kilka minut.


Dobry troubleshooting = metodyczne podejście + odpowiednie narzędzia

Related Articles