Знайдено причину проблем dehydrated з ACME-серверами, відмінними від LetsEncrypt

Sebastian Krause визначив джерело дивної несумісності із сервісом Обхід сценарій зневоднений, який використовується для автоматизації отримання TLS-сертифікатів за протоколом ACME. З Bypass працюють і еталонний клієнт, і uacme, але не dehydrated (точніше, він також з деякими обхідними маневрами заробив, але виключно в режимі dns-1).

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

Під час обговорення проблеми було запропоновано використовувати зовнішній парсер JSON, такий як json_pp або jq (Додати в pipe 'jq -r «.authorizations | .[]»' для коректного аналізу).
Недоліком такого підходу є розмиття ідеї обійтися мінімальними засобами, що легко верифікуються, а також проблеми з обробкою помилок.

Автор проекту dehydrated (проект нещодавно був проданий компанії Apilayer GmbH) погодився, що розбір JSON є великою проблемою, але додавати зовнішні парсери він не вважає гарною ідеєю, оскільки однією з ключових переваг скрипту є відсутність прив'язки до зовнішніх залежностей. В даний час він зайнятий, але сподівається у найближчі кілька днів приділити увагу вирішенню проблеми. У планах відзначено переробку парсера JSON або інтеграцію готового парсера мовою shell. JSON.sh.

Джерело: opennet.ru

Додати коментар або відгук