snippets · bash

Mein TLS-Zertifikat ist gültig, aber ein Client meckert trotzdem

Chrome ist zufrieden, curl oder ein anderer Client meldet Zertifikatsprobleme – oder umgekehrt. Dann reicht „Zertifikat läuft erst nächstes Jahr ab“ nicht.

Was liefert der Server wirklich aus?

openssl s_client -connect <HOST>:443 -servername <HOST> -showcerts </dev/null

-servername setzt SNI. Ohne SNI kann ein Server mit mehreren Domains ein anderes Zertifikat liefern als der Browser.

Für die kompakte Sicht auf das Leaf-Zertifikat:

echo | openssl s_client -connect <HOST>:443 -servername <HOST> 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

Prüffragen

  • Steht der Host im subjectAltName?
  • Ist das Zertifikat zeitlich gültig?
  • Ist der Aussteller plausibel?
  • Liefert der Server die notwendige Zwischenzertifikatskette mit?
  • Testest du wirklich denselben Host/IP wie der Browser?

Warum Clients unterschiedlich reagieren können

Clients nutzen unterschiedliche Trust Stores und können Zwischenzertifikate unterschiedlich nachladen oder cachen. Ein Browsererfolg beweist daher nicht automatisch, dass die ausgelieferte Kette für jeden Client vollständig ist.

Nicht mit -k oder --insecure „lösen“. Das schaltet nur die Prüfung ab und entfernt genau die Information, die du zur Diagnose brauchst.