Glossar / Entwicklerreferenz
Zwischenzertifikat
- Was ist ein Zwischenzertifikat?
- Ein Zwischenzertifikat steht zwischen einem Root-Zertifikat und einem Endzertifikat: Es wird vom Root-Zertifikat signiert und signiert selbst das Endzertifikat, damit der private Schlüssel des Root-Zertifikats offline und ungenutzt bleiben kann.
Zertifizierungsstellen signieren das Zertifikat einer Website nie mit dem Root-Schlüssel. Sie signieren ein Zwischenzertifikat, verwahren den Root-Schlüssel offline und stellen vom Zwischenzertifikat aus aus, das sich innerhalb von Wochen ersetzen lässt statt in den zwanzig Jahren, die ein Root-Zertifikat lebt. Wenn ein Server vergisst, sein Zwischenzertifikat mitzusenden, überdecken Browser die Lücke und strengere Clients nicht, sodass eine Website in Chrome in Ordnung aussehen und in einer App fehlschlagen kann.
So funktioniert es
Ein Zwischenzertifikat ist ein CA-Zertifikat, das kein Vertrauensanker ist. Es trägt die Erweiterung basicConstraints mit CA auf true, was ihm erlaubt, weitere Zertifikate zu signieren, und es ist selbst von einem Root-Zertifikat oder von einem anderen Zwischenzertifikat signiert. Die Prüfung steigt vom Zertifikat des Servers nach oben, prüft jede Signatur gegen den Schlüssel im jeweils darüberliegenden Zertifikat und endet, wenn sie etwas erreicht, das bereits im lokalen Trust Store vorhanden ist.
Diese Aufteilung der Ausstellung bringt drei Dinge. Der Root-Schlüssel bleibt in einem Offline-Modul, das nur für skriptgesteuerte, bezeugte Zeremonien herauskommt. Der Schaden bleibt begrenzt, weil ein kompromittiertes Zwischenzertifikat widerrufen und neu ausgestellt werden kann, ohne den Root Store eines Geräts anzutasten. Und eine Zertifizierungsstelle kann ihre Produktlinien trennen, sodass Probleme in der billigen automatisierten Ebene nicht die auditierte Ebene betreffen.
Die Kreuzsignierung ist der Kniff, der eine neue Zertifizierungsstelle überhaupt nutzbar macht. Ein einzelner Zwischenzertifikatsschlüssel kann zwei Zertifikate tragen: eines, das von der Root der eigenen Organisation signiert ist, und eines, das von einer etablierten Root signiert ist, die bereits auf alten Geräten liegt. Let's Encrypt stützte sich jahrelang darauf, weil ISRG Root X1 in Android-Versionen fehlte, die keine Updates mehr erhielten, sodass eine von IdenTrust kreuzsignierte Kette ausgeliefert wurde. Die Krücke überlebte die Root dahinter, die am 30. September 2021 abgelaufen ist, und Let's Encrypt lieferte die kreuzsignierte Kette schließlich am 6. Juni 2024 nicht mehr aus.
Der Zusammenbau der Kette ist der Teil, den Betreiber falsch machen. Ein Server sollte sein eigenes Zertifikat plus jedes darüberliegende Zwischenzertifikat senden und vor dem Root-Zertifikat haltmachen, das der Client bereits hat. Browser verbergen Auslassungen, indem sie das fehlende Stück von der URL in der Erweiterung für den Zugriff auf Informationen der Zertifizierungsstelle abrufen oder eine zwischengespeicherte Kopie wiederverwenden. Eine Zahlungsbibliothek, eine mobile App oder ein Kommandozeilen-Client tut meist weder das eine noch das andere und meldet schlicht eine nicht vertrauenswürdige Kette.
Wo es auftritt
BIP70 lieferte Zwischenzertifikate innerhalb der Zahlungsnachricht selbst mit. Das Feld pki_data enthielt eine X509Certificates-Struktur, deren erster Eintrag das Zertifikat des Händlers selbst war, gefolgt von den Zwischenzertifikaten, die nötig waren, um eine Root zu erreichen, wobei die Root weggelassen wurde, weil erwartet wurde, dass die Wallet sie bereits hat. Das ist genau die Reihenfolge, die ein TLS-Server sendet, übertragen in einen Protocol Buffer.
Außerhalb von Bitcoin machen sich Zwischenzertifikate bemerkbar, wann immer eine Verbindung in einem Programm gelingt und in einem anderen fehlschlägt. Eine Börse, deren API-Endpunkt einem Handelsskript einen Zertifikatsfehler wirft, während die Website normal lädt, hat fast immer ein Zwischenzertifikat aus ihrer Kette weggelassen. Das Testen mit einem Werkzeug, das die stille Reparatur des Browsers nicht vornimmt, ist der Weg, es zu erkennen, bevor Ihr Bot es tut.
Zwischenzertifikat vs. Root-Zertifikat
Ein Root-Zertifikat und ein Zwischenzertifikat sind beide CA-Zertifikate, und der Unterschied liegt darin, wer sie signiert hat und wo der Schlüssel liegt. Ein Root-Zertifikat ist selbstsigniert und bezieht seine Macht aus der Aufnahmeliste eines Anbieters. Ein Zwischenzertifikat bezieht seine Macht aus der Signatur darüber, was bedeutet, dass die ausstellende Zertifizierungsstelle es an einem Nachmittag widerrufen kann, ohne ein Software-Update irgendwo. Im laufenden Betrieb nimmt das Zwischenzertifikat fast alle Signierungen vor, während das Root-Zertifikat fast keine vornimmt, und diese Asymmetrie ist der ganze Grund für die Existenz dieser Ebene.