Das Symptom
Ein Server bekommt ein neues Zertifikat, etwa bei der jährlichen Verlängerung. Im Browser am Rechner ist alles in Ordnung. Auf Geräten mit Android 13 oder älter brechen aber Apps, eingebettete Webviews oder Mail-Apps die Verbindung ab. Typische Meldungen sind:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. javax.net.ssl.SSLHandshakeException: … Trust anchor for certification path not found.
Browser wie Firefox bringen ihre eigene Liste vertrauenswürdiger Root-CAs mit und funktionieren deshalb manchmal trotzdem. Das macht die Fehlersuche verwirrend: Der Fehler tritt nicht überall auf, sondern nur in Apps, die den Zertifikatsspeicher des Systems verwenden.
Die Ursache: eine Root-CA, die Android 13 nicht kennt
Zertifizierungsstellen stellen ihre Zertifikate zunehmend unter neuen Root-CAs aus. Bei GlobalSign ist das die GlobalSign Root R46 (RSA) bzw. E46 (ECC). Diese Roots stehen erst ab Android 14 (Oktober 2023) im System-Zertifikatsspeicher. Android 13 und älter kennen sie nicht. Dasselbe gilt für weitere neuere Roots, etwa ISRG Root X2, DigiCert TLS RSA4096 Root G5 oder die HARICA-Roots von 2021.
Die Kette eines Server-Zertifikats sieht dann so aus:
www.beispiel.de (Server-Zertifikat)
└─ GlobalSign … CA (Zwischenzertifikat)
└─ GlobalSign Root R46 ← unter Android 13 unbekannt
Warum es nicht hilft, die Root-CA mitzuschicken
Naheliegend wäre, die Root R46 einfach mit in die Zertifikatsdatei zu packen. Das bringt nichts: Ein Client vertraut einer Root-CA nur dann, wenn sie in seinem eigenen Speicher liegt. Eine vom Server mitgeschickte Root wird nie als Vertrauensanker akzeptiert, sonst könnte jeder Server sich selbst beglaubigen. Auch die Root von Hand auf dem Gerät zu installieren, hilft den meisten Apps nicht. Seit Android 7 vertrauen Apps standardmäßig keinen vom Nutzer installierten Zertifikaten.
Die Lösung: ein Cross-Zertifikat
Ein Cross-Zertifikat enthält dieselbe CA, also denselben Namen und denselben Schlüssel wie die Root R46, ist aber von einer älteren Root unterschrieben, die auch alte Geräte kennen. Für R46 gibt es unter anderem ein Cross-Zertifikat von GlobalSign Root CA – R3. Schickt der Server dieses Cross-Zertifikat mit, ergibt sich für alte Geräte ein gültiger Weg:
www.beispiel.de
└─ GlobalSign … CA
└─ GlobalSign Root R46 (Cross, signiert von R3)
└─ GlobalSign Root CA – R3 ← auch unter Android 13 vorhanden
Neue Geräte kennen R46 selbst und beenden die Prüfung dort. Alte Geräte gehen einen Schritt weiter bis R3. Beide vertrauen der Verbindung, ohne dass sich am Server-Zertifikat etwas ändert.
Schritt für Schritt
- Prüfen: Den Server im SSL-Check eingeben. Im Abschnitt „Ältere Geräte“ erscheint die Warnung, dass die Kette bei einer Root endet, die erst ab Android 14 vorhanden ist.
- Reparieren: Auf „Im Konverter reparieren“ klicken. Der Zertifikat-Konverter übernimmt die Kette und bietet das passende Cross-Zertifikat aus der Mozilla-CCADB an.
- Exportieren: Den privaten Schlüssel dazunehmen und das Format des Servers wählen, etwa ein PEM-Bundle für nginx oder eine PFX-Datei für IIS.
- Einspielen: Bei nginx zeigt
ssl_certificateauf die neue Datei mit der Reihenfolge Server-Zertifikat → Zwischenzertifikat → Cross-Zertifikat. Danach den Dienst neu laden. - Erneut prüfen: Der SSL-Check sollte jetzt bei „Ältere Geräte“ grün sein.
server {
listen 443 ssl;
server_name www.beispiel.de;
ssl_certificate /etc/ssl/beispiel/fullchain-cross.pem; # Server + Zwischen-CA + Cross
ssl_certificate_key /etc/ssl/beispiel/server.key;
}
Was du wissen solltest
- Das Cross-Zertifikat hat ein eigenes Ablaufdatum. Das von R3 läuft im März 2029 ab. Bis dahin dürften kaum noch Geräte mit Android 13 im Einsatz sein.
- Das Cross-Zertifikat musst du bei jeder Verlängerung wieder mitschicken. Der SSL-Check zeigt nach dem Wechsel, ob das geklappt hat.
- Die zusätzlichen rund 1,5 KB pro Verbindungsaufbau fallen in der Praxis nicht ins Gewicht.
FAQ
Betrifft das nur GlobalSign?
Nein. Jede Kette, die bei einer Root endet, die erst ab Android 14 im Speicher ist, ist betroffen, zum Beispiel auch ISRG Root X2 oder DigiCert TLS RSA4096 Root G5. Der SSL-Check erkennt das automatisch.
Kann ich die Root R46 auf dem Handy installieren?
Für den eigenen Browser ja, für die meisten Apps nein: Seit Android 7 vertrauen Apps nur noch dem System-Zertifikatsspeicher, nicht den vom Nutzer installierten Zertifikaten. Für Kunden-Geräte ist das ohnehin keine Lösung.
Schadet das Cross-Zertifikat neuen Geräten?
Nein. Neue Geräte kennen R46 selbst und beenden die Prüfung dort. Das Cross-Zertifikat wird für sie einfach nicht gebraucht.