Ihr Browser hält zwischengespeicherte Intermediates vor, erinnert sich an frühere Besuche und ist nachsichtig. Er ist das Letzte, womit man testet, nicht das Erste. Diese Befehle fragen den Server direkt, und nichts ist zwischengespeichert.
1. Verifiziert es überhaupt
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com < /dev/null 2>/dev/null \
| grep -E 'Verify return code|^ *[0-9]+ s:'
Verify return code: 0 (ok) und mindestens zwei aufgeführte Zertifikate. Alles andere ist eine unvollständige Kette.
2. Welche Namen es abdeckt
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com < /dev/null 2>/dev/null \
| openssl x509 -noout -text | grep -A1 "Subject Alternative Name"
3. Wann es abläuft
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null \
| openssl x509 -noout -dates
4. Jede Subdomain, nicht nur die Hauptdomain
for h in www shop api mail staging; do
printf '%-8s ' "$h"
echo | openssl s_client -connect "$h.yourdomain.com:443" -servername "$h.yourdomain.com" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null || echo "no certificate"
done
5. Ohne Cache, als Fremder
curl -sS -o /dev/null -w '%{http_code} %{ssl_verify_result}\
' https://yourdomain.com/
# ssl_verify_result 0 is correct
6. Alte Protokolle, die abgelehnt gehören
openssl s_client -connect yourdomain.com:443 -tls1_1 < /dev/null 2>&1 | tail -3
# a handshake failure here is the CORRECT result
TLS 1.0 und 1.1 sind zurückgezogen, und 3DES und RC4 sollten nicht aushandeln. Verbindet sich eines davon, ist die Konfiguration alt - setzen Sie
ssl_protocols TLSv1.2 TLSv1.3; und eine moderne Cipher-Liste.Dann den Ablauf überwachen
0 8 * * * /usr/local/bin/check-cert.sh yourdomain.com 21 # warn 21 days out
Prüfen Sie das Zertifikat auch von AUSSERHALB Ihres Netzes. Eine Firewall oder ein Proxy kann intern ein anderes Zertifikat zeigen - ein interner Test kann also bestehen, während die öffentliche Website kaputt ist.