Let’s Encrypt Zertifikate und PHP CURL sind wie es scheint eine unheilige Verbindung, denn sie wollen nicht zusammen arbeiten. Aber der Reihe nach:
Am Anfang war das Update…
… und nach dem WordPressupdate, kommt auch die WordPress-Netzwerk-Updatefunktion, die, wenn man wie Bloggt-in-Braunschweig.de eine MultiSite betreibt, alle Blogs auf Stand bringt. Das war bislang kein Problem, weil die ohne SSL im Spiel zu haben, updated WordPress die Subinstallationen per HTTP aufruf. Nun, wenn man wie unsere Admins aber ein Lets Encrypt Zertifikat für die WordPressseite benutzt, ruft man den WP-Admin auch mit HTTPS auf, weil sonst das Zertifikat vollkommen umsonst wäre.
Solange man selbst den Adminteil aufruft, ist alles ok, weil der Browser kennt das LE Root Zert schon. Will man jetzt aber das Netzwerk updaten, ruft WordPress die Subseiten auch per HTTPS auf, auch wenn die gar nicht per HTTPS erreichbar sind, weil sie mit Subdomains arbeiten, für die der Webserver auch konfiguriert sein muß. Ab 100 Subdomains spielt LE auch bei der Zertifikaterstellung nicht mehr mit, was bedeutet, MultiSites mit über hundert Blogs müssen ein Wildcard-Zertifikat kaufen und das kann ins Geld gehen.
Jetzt gibt es zwei Wege das Problem mit LE zu lösen, ohne Geld auszugeben :
Man wechselt unschön auf HTTP und aktualisiert die Blogs so, oder man manipuliert den ROOT.CA Speicher von PHP und parkt das LE Root CA dort. Der letztere Teil rein technisch nicht weiter tragisch:
- Firefox aufmachen -> Einstellungen -> Erweitert -> Zertifikate und das LE ROOT unter DST suchen und als /home/username/LEROOTCA.cert abspeichern.
- im PHP Code vor das curl_exec() folgende Anweisung schreiben:
curl_setopt ($ch, CURLOPT_CAINFO, ‚/home/username/LEROOTCA.cert‘);
- Dann sollte das PHP Script auch das LE Zertifikat akzeptieren
Hier ein paar Wege um an so ein Zertifikat zu kommen:
Im FireFox auf der Seite mit dem benötigten Zertifikat einfach die Seiteninformationen aufrufen, dann Sicherheit und Zertifikat ansehen ( Details ) :
Jetzt der Haken an der Sache: im WordPress sind einfach zu viele Curl Calls drin, als das man als Laie mal eben die obige Operation durchführen kann. Ergo: Melden wir WP-User uns jetzt mal bei WP, auf das die den Support für LE bei WordPress einfach mitbringen 🙂