Rasta išsausėjusių problemų su ACME serveriais, išskyrus „LetsEncrypt“, priežastis

Sebastian Krause определил источник странной несовместимости с сервисом apeiti scenarijus dehidratuota, используемого для автоматизации получения TLS-сертификатов по протоколу ACME. С Bypass работают и эталонный клиент, и uacme, но не dehydrated (точнее, он тоже с некоторыми обходными манёврами заработал, но исключительно в режиме dns-1).

Причина оказалась банальна: вместо того чтобы разбирать ответ в формате JSON по настоящему, автор dehydrated использовал особенность форматирования конкретного JSON-вывода от сервиса Let’s Encrypt и выполнял разбор при помощи регулярного выражения. Но Bypass возвращает не красиво отформатированный, а минифицированный JSON, и использованное регулярное выражение не сработало. Указанный подход не исключает возникновения проблем и с LetsEncrypt, если данный сервис в будущем без предупреждения поменяет формат выдачи, оставшись при этом вполне в рамках официального протокола.

При обсуждении проблемы было предложено использовать внешний парсер JSON, такой как json_pp arba jq (добавить в pipe ‘jq -r «.authorizations | .[]»‘ для корректного разбора).
Недостатком такого подхода является размытие идеи обойтись минимальными и легко верифицируемыми средствами, а также проблемы с обработкой ошибок.

Автор проекта dehydrated (проект недавно был Išparduota компании Apilayer GmbH) sutiko, что разбор JSON является большой проблемой, но добавлять внешние парсеры он не считает хорошей идеей, так как одним из ключевых достоинств скрипта является отсутствие привязки к внешним зависимостям. В настоящее время он занят, но надеется в ближайшие несколько дней уделить внимание решению проблемы. В планах отмечена переработка парсера JSON или интеграция готового парсера на языке shell — JSON.sh.

Šaltinis: opennet.ru

Добавить комментарий