Nach Abgleich auf mehreren Systemen (die meisten aktueller Stand) konnten zwei Ursachen für das Problem festgestellt werden. Vielleicht kann KK auch etwas dazu sagen.
1. ehemalige Zertifikate von mittlerweile gelöschten Kunden
Hier wurden Zertifikate über LE beantragt, die zum damaligen Zeitpunkt auch gültig waren. Als Aussteller dieser Zertifikate ist noch X3 eingetragen, was zur damaligen Zeit auch gültig war. Das zugehörige Zwischenzertifikat ist aber nun abgelaufen und nicht mehr gültig. Beim Löschen der Kunden wurden die zugehörigen Zertifikate aber nicht gelöscht und blieben als "Karteileiche" unter "/etc/ssl/certs" liegen.
2. aktive Kunden
2.1. aktiver Kunde, aber Vertrag aktuell gesperrt
Hier gilt das vorher geschriebene. Kunde hatte ein gültiges Zertifikat, welches X3 als Aussteller hat. Das zugehörige Zwischenzertifikat ist aber mittlerweile abgelaufen und wird in der Übersicht bei LiveConfig unter Details als abgelaufen ausgewiesen. Da durch die Sperre keine Verlängerung stattfindet, bleiben diese alten Zertifikate im System hängen.
2.2 aktiver Kunde mit älteren Verträgen
Hier wurden die Zertifikate zu einem Zeitpunkt beantragt, als das alte Zwischenzertifikat noch gültig und der neue Aussteller noch nicht aktiv war. Nach und nach wurden solche Zertifikate aktualisiert und das neue gültige Zwischenzertifikat abgelegt. Das alte Zwischenzertifikat verbleibt aber im System gespeichert.
Ursache allen Übels ist (unter Debian) die Funktion von "update-ca-certificates". Diese wird bei einer Aktualisierung des Paketes "ca-certificates" ausgeführt und erstellt unter "/etc/ssl/certs" Verlinkungen zu Zertifikaten her. Die Verlinkung trägt dabei den Namen HASHWERT.0, wobei bei Zwischenzertifikaten das .0 als .1, .2 usw. fortgeführt wird, wenn ein Zwischenzertifikat aktualisiert wird (Beispielsweise von Aussteller X3 auf R3).
Bei neueren Zertifikaten ist dies alles kein Problem, da "update-ca-certificates" diese ignoriert, da mehrere Blöcke bzw. auch DH-Parameter in den Zertifikatsdateien vorhanden sind. In den alten Zertifikaten ist jedoch nur ein Block enthalten, daher werden diese Dateien gehasht. Zusätzliches Problem ist die Fortführung der Zertifikatskette. Dies sorgt auch dafür, dass alte abgelaufene Zwischenzertifikate im System verankert bleiben.
Wenn nun eine Funktion ein LE Zertifikat einer Gegenstelle verifizieren möchte, dann wird (unter Debian) in dem Ordner "/etc/ssl/certs" nach einem passenden Zwischenzertifikat gesucht. Existieren nun solche "Karteileichen" auf dem System, dann wird die Verifizierung gegen das abgelaufene Zertifikat vorgenommen und ein gültiges Zwischenzertifikat oder die Datei "ca-certificates.crt" wird ignoriert. Mit den bekannten Folgen, dass der Verbindungsaufbau dann abgelehnt wird.
Mögliche Problemlösungen, ohne Wertung der Sinnhaftigkeit
1. Skripte anpassen und die Verifizierung abstellen. Damit hebelt man die Sicherheit aus, die man eigentlich damit erreichen möchte. Und je nach Anzahl der betroffenen Seiten ein mühseliges Unterfangen.
2. Anpassung der php.ini. Unter LiveConfig den Schlüssel "openssl.cafile" ergänzen, dort den Wert "/etc/ssl/certs/ca-certificates.crt" eintragen und dann die Anpassung für die Verträge übernehmen lassen. Der Wert überschreibt damit die Systemeinstellung und zumindest PHP Skripte funktionieren wieder. Hilft aber nicht bei anderen Skriptarten. Hinweis: Evtl. auch bei der systemeigenen PHP Version anpassen, damit dies auch auf der Shell oder als Cronjob funktioniert.
3. Im Ordner "/etc/ssl/certs" nach diesen alten Verlinkungen suchen und diese dann entfernen. Löst das Problem zumindest bis zur nächsten Aktualisierung von "ca-certificates". Dauerhaft ist nur ein Aufräumen dieser "Karteileichen" und die Löschung der alten Zertifikate/Zwischenzertifikate, damit diese nicht neuverlinkt werden können. Ist jedoch auch mühselig, da man den Dateien selbst nicht ansieht, ob diese aktiv verwendet werden oder sinnlos rumliegen. Aber zumindest kann man den Inhalt mit "openssl x509 -noout -text -in ZERTIFIKAT.crt" überprüfen.
Für bessere oder einfachere Vorschläge bin ich offen.