Verlängerung eines CA Zertifikats

Das Auslaufen meines self-signed CA Zertifikates konfrontierte mich mal wieder mit dem openssl CLI und seinen Tücken.

Ausgehend von einer theoretischen Betrachtung sind nur wenige Schritte notwendig um ein CA Zertifikat zu verlängern, was eigentlich bedeutet es in einer erneuerten Version herauszugeben.

  1. Unter Berücksichtigung des private keys der CA erstellt man ein Certificate Request.
  2. Dies wird mit dem private key der CA signiert und erstellt somit ein neues CA Zertifikat.
  3. Dann überprüft man ob schon vormals ausgestellte Server-Zertifikate vom neuen CA Zertifikat akzeptiert werden.
  4. Das neue CA Zertifikat wird auf die Zielplattformen geladen.
Verlängerung eines CA Zertifikats weiterlesen

subjectAltName

Seit Chrome 58 funktionieren einige https Verbindungen nicht mehr, da der  Browser das Zertifikat als ungültig erklärt.

Hintergrund ist RFC2818, der die Namenserkennung des zu sichernden Servers nicht mehr im CN (Common Name) Feld, sondern via DNS Eintrag in Feld SAN (Subject Alternative Name).

Nach einigen Versuchen, hat sich gezeigt, dass das Zertifikatsrequest noch nicht unbedingt die Requested Extension x509v3 Subject Alternative Name haben muss.

Spätestens aber beim Signieren muss es aber in das Zertifikat (public key) eingetragen werden. Dazu schaut man in der OpenSSL Steuerungsdatei

/etc/ssl/openssl.cnf

wohin die Variable

x509_extensions

zeigt. Dabei handelt es sich um eine Sektion die weiter unten mit [ ] eingeschlossen ist. Dort trägt man folgende Zeile ein.

subjectAltName=${ENV::SAN}

Dies erlaubt eine dynamische Zuweisung des DNS Eintrags als Umgebungsvariable, die man bspw. vor der Signierung auf der Kommandozeile setzt.

export SAN=DNS:www.testserver.org

Die Umgebungsvariable ist aber mit der o.g. Konfiguration auch notwendig, da sonst openssl ein extension Fehler wirft.

Abgeleitet wurde diese Konfiguration von dieser Webseite – danke dafür.