Sebastian Krause die Quelle für die seltsame Inkompatibilität mit dem Dienst identifiziert. Skript , das zur Automatisierung der TLS-Zertifikatsbeschaffung über das ACME-Protokoll verwendet wird. Mit Bypass funktionieren sowohl der Referenz-Client als auch uacme, aber nicht dehydrated (genauer gesagt, es hat auch mit einigen Workarounds funktioniert, jedoch ausschließlich im dns-1-Modus).
Der Grund war banal: Anstatt die Antwort im JSON-Format richtig zu parsen, hat der Autor von dehydrated eine Besonderheit der Formatierung einer bestimmten JSON-Ausgabe des Let’s Encrypt-Dienstes genutzt und das Parsen mit regulären Ausdrücken durchgeführt. Aber Bypass gibt nicht schön formatiertes, sondern minimiertes JSON zurück, und das verwendete hat nicht funktioniert. Der angegebene Ansatz schließt nicht aus, dass auch bei LetsEncrypt Probleme auftreten, wenn dieser Dienst in Zukunft ohne Vorwarnung das Ausgabeformat ändert, während er weiterhin innerhalb des offiziellen Protokolls bleibt.
Bei der Diskussion des Problems wurde vorgeschlagen, einen externen JSON-Parser zu verwenden, wie z. B. oder (in die Pipe ‘jq -r «.authorizations | .[]»‘ für eine korrekte Analyse hinzufügen).
Ein Nachteil dieses Ansatzes ist die Unschärfe der Idee, mit minimalen und leicht verifizierbaren Mitteln auszukommen, sowie die Probleme bei der Fehlerbehandlung.
Der Autor des Projekts dehydrated (das Projekt wurde kürzlich an die Firma Apilayer GmbH) , dass die Verarbeitung von JSON ein großes Problem darstellt, aber er hält es nicht für eine gute Idee, externe Parser hinzuzufügen, da eine der Schlüsselstärken des Skripts die Unabhängigkeit von externen Abhängigkeiten ist. Derzeit ist er beschäftigt, hofft jedoch, in den nächsten Tagen Zeit für die Lösung des Problems zu finden. Auf seiner To-do-Liste steht die Überarbeitung des JSON-Parsers oder die Integration eines fertigen Parsers in Shell-Sprache — .
Quelle: opennet.ru
