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 Rozwiązywanie problemów Certyfikaty HTTPS

Pół godziny do prezentacji dla klienta. Odświeżasz stronę demonstracyjną i widzisz wielki czerwony ekran: “Twoje połączenie nie jest prywatne”. Serce staje. Znasz ten stan? Problemy z certyfikatami SSL/TLS potrafią zaskoczyć w najbardziej nieodpowiednim momencie - ale większość z nich ma proste rozwiązanie, jeśli wiesz, gdzie szukać.

Narzędzia Diagnostyczne

Zanim zaczniesz właściwy troubleshooting, upewnij się że masz pod ręką openssl - to twój najlepszy przyjaciel w diagnostyce SSL. Większość problemów da się zdiagnozować w kilka minut.

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 -

Wygasłe certyfikaty to najczęstszy problem - i jednocześnie najłatwiejszy do uniknięcia. Jeśli jeszcze nie masz monitoringu certyfikatów, koniecznie sprawdź jak skonfigurować SSL na Nginx z automatycznym odnawianiem.

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

Gdy ręczne metody nie wystarczają, warto sięgnąć po bardziej kompleksowy monitoring. Sprawdź nasz artykuł o monitoringu certyfikatów z Prometheus i Grafana - tam znajdziesz jak ustawić alerty, które uprzedzą cię o problemach zanim zauważą je użytkownicy.

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" admin@example.com
fi

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

Dobre podejście do troubleshootingu SSL to przede wszystkim metodyczność - nie panikuj, idź punkt po punkcie przez checklistę. Większość problemów to wygasłe certyfikaty (automatyzuj odnawianie!), niekompletny łańcuch (zawsze używaj fullchain) lub hostname mismatch (dodaj wszystkie domeny do SAN). Mając odpowiednie narzędzia, naprawa zajmuje kilka minut - nie godzin. A żeby uniknąć problemów w przyszłości, użyj CrtMgr do automatycznego monitoringu i alertów przed wygaśnięciem.

Related Articles