Intermediate Certificates
Zertifikate sind ein wichtiger Bestandteil in der Kommunikation des Webs, da sie die Verbindung verschlüsseln und deine Daten nicht im Klartext senden. Hier gehen wir etwas näher auf die Intermediate Certificates ein.
Inhaltsverzeichnis
In diesem Artikel schauen wir uns das Thema Zertifikate einmal genauer an und welche Folge ein fehlendes Zwischenzertifikat haben kann. Dabei werden wir von einem Fehler ausgehend auf die Reise gehen.
Einleitung
Heutzutage ist fast jede Webseite über HTTPS aufrufbar und das klassische HTTP wird nicht mehr unterstützt. Doch was bedeutet das eigentlich? Eine Webseite die du per HTTPs aufrufst, ist mit einem Zertifikat gesichert. Das bedeutet, dass der Datenverkehr zwischen deinem Browser und der Webseite verschlüsselt wird, sodass deine Eingaben und Daten nicht im Klartext durch das Internet reisen.
Dazu kann ein Webseitenbetreiber bei seinem Hoster ein SSL Zertifikat einrichten lassen, was meist mit Extrakosten verbunden ist oder über öffentliche Stellen selbst Zertifikate für die Webseite erstellen, was dann meist mit Aufwand verbunden ist. Wir verwenden daher den zweiten Weg über "Let's Encrypt" und kümmern uns alle drei Monate um aktuelle Zertifikate für die Domain und Subdomains.
Problem
Nun waren wir aktuell am Testen einer eigenen API der Webseite über ABAP, als es zu einem Fehler beim Zugriff auf die API kam. Der Auszug der Fehlermeldung sah wie folgt aus:
SSL handshake with software-heroes.com:443 failed: SSSLERR_PEER_CERT_UNTRUSTED (-102)
Peer's X.509 certificate (chain) validation failed (missing trust?)
Weiter unten in der Fehlermeldung finden wir dann weitere Informationen zur Fehlermeldung und das die Kette von Zertifikaten unvollständig ist:
ERROR: The chain of certificates is incomplete or untrusted, missing certificate of [AE:58:47:28] CN=dev.software-heroes.com
Prüfen wir nun unsere Webseite mit einem SSL Checker, dann erhalten wir auch eine entsprechende Fehlermeldung. Diese Meldung gilt allerdings nicht für die meisten Browser, sondern fällt erst beim Zugriff per API auf die Seite auf, wenn das Zertifikat bzw. die Zertifikatskette auch wirklich überprüft wird.
Intermediate Certificates
Über Let's Encrypt finden wir auch schnell weitere Informationen zur Kette von Zertifikaten, die bei der Registrierung relevant sind. Dazu das folgende Schaubild aus dem Artikel:
Das Root-Zertifikat wird meist für längere Zeit ausgestellt und der Schlüssel zu diesem wird Offline aufbewahrt, damit das Zertifikat nicht kompromittiert wird. Wäre der Schlüssel kompromittiert, könnte sich jeder Angreifer als vertrauensvolle Seite ausgeben und uns als User Sicherheit vortäuschen. Darunter gibt es eine Schicht an Zertifikaten, die nicht ganze so lange haltbar sind, in der Regel 1-2 Jahre, diese "Zwischenzertifikate" stellen die Verbindung von unserer Webseite zum Root-Zertifikat her. Diese Kette sollte einer prüfenden Stelle (Webseite, Software, APIs) aber auch bekannt sein, damit sie die Echtheit prüfen kann und weiß, dass sie der Verbindung trauen kann.
Lösung
Über den Browser kannst du dir das aktuelle Zertifikat der Webseite anschauen, so können wir auch leicht herausfinden, welcher Kette wir zugeordnet sind. Die Funktion ist von Browser zu Browser unterschiedlich, in die meisten Fällen findest du in der Adresszeile, vor der URL, einen Absprung zum Zertifikat:
Für unsere Domain ist das R10. Über die Liste von Let's Encrypt finden wir dann auch den passenden Schlüssel für den Upload. Im Beispiel laden wir unser Zertifikat, den Schlüssel zum Zertifikat, sowie den Schlüssel für R10 hoch. In den meisten Fällen haben die Schlüssel die Endung ".pem" und sind damit leicht erkennbar. Wichtig an dieser Stelle ist der Upload des Schlüssel vom "Intermediate Certificate" und nicht der Upload des Zertifikats selbst.
Testen wir nun erneut die SSL Verbindung der Webseite, erhalten wir eine positive Meldung und unser Beispiel vom Anfang funktioniert nun auch fehlerfrei.
Fazit
In den meisten Fällen stecken die Fehler im Detail und auch wenn die Webseite sauber läuft, heißt es nicht, dass auch SSL zu 100% konfiguriert ist. Spätestens beim Zugriff über Software, wird die Kette an Zertifikaten geprüft und geschaut, ob der Verbindung getraut werden kann.