找到了除 LetsEncrypt 之外的 ACME 服务器脱水问题的原因

塞巴斯蒂安·克劳斯 决定 与服务奇怪的不兼容的根源 绕道 脚本 脱水,用于使用 ACME 协议自动接收 TLS 证书。 参考客户端和 uacme 都可以使用 Bypass,但不能脱水(更准确地说,它也可以使用一些解决方法,但仅限于 dns-1 模式)。

事实证明,原因很简单:脱水的作者并没有真正解析 JSON 格式的响应,而是使用了 Let's Encrypt 服务的特定 JSON 输出的格式化功能,并使用正则表达式对其进行解析。 但是 Bypass 返回的不是格式精美的,而是缩小的 JSON,并且使用了 正则表达式 不工作。 这种方法并不排除如果该服务将来在没有警告的情况下更改发行格式,同时完全保持在官方协议的框架内,那么 LetsEncrypt 会出现问题。

在讨论该问题时,建议使用外部 JSON 解析器,例如 json_pp или jq (将 'jq -r ".authorizations | .[]"' 添加到管道以进行正确解析)。
这种方法的缺点是淡化了使用最少且易于验证的手段的想法,以及错误处理方面的问题。

脱水项目作者(该项目最近 卖完了 阿皮莱尔有限公司) 我同意,解析 JSON 是一个大问题,但他不认为添加外部解析器是一个好主意,因为脚本的关键优点之一是缺乏与外部依赖项的绑定。 他目前很忙,但希望在接下来的几天里集中精力解决问题。 这些计划包括重新设计 JSON 解析器或在 shell 语言中集成现成的解析器 - JSON.sh.

来源: opennet.ru

添加评论