2019年9月24日あたりから古い dehydrated で Let’s encrypt の証明書が更新できなくなっていたらしく、 Debian Bug #941414 に書いてあるように grepgrep -i に変更して解決しました。 以下、その詳細です。

2019-10-06 追記

その後 0.6.1-2 から 0.6.2-2ubuntu0.18.04.1 に更新されて解決しているようです。 (パッケージの更新後に、まだ証明書の更新が発生していないので未確認)

確認バージョン

  • Ubuntu 18.04.3 LTS
  • dehydrated 0.6.1-2

エラーメッセージ

同じ問題に引っかかった人が検索で見つけやすいように、 nonce だけ書き換えてエラーメッセージ付近全体を貼り付けておきます。

(Less than 30 days). Renewing!
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting new certificate order from CA...
  + ERROR: An error occurred while sending post-request to https://acme-v02.api.letsencrypt.org/acme/new-order (Status 400)

Details:
HTTP/2 400
server: nginx
date: Thu, 03 Oct 2019 13:27:03 GMT
content-type: application/problem+json
content-length: 112
boulder-requester: 729354
cache-control: public, max-age=0, no-cache
link: <https://acme-v02.api.letsencrypt.org/directory>;rel="index"
replay-nonce: XXXXXXXXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

{
  "type": "urn:ietf:params:acme:error:badNonce",
  "detail": "JWS has no anti-replay nonce",
  "status": 400
}

対処方法

sudoedit /usr/bin/dehydrated

    nonce="$(http_request head "${CA}" | grep Replay-Nonce: | awk -F ': ' '{print $2}' | tr -d '\n\r')"

    nonce="$(http_request head "${CA}" | grep -i Replay-Nonce: | awk -F ': ' '{print $2}' | tr -d '\n\r')"

に書き換えました。

    nonce="$(http_request head "${CA_NEW_NONCE}" | grep Replay-Nonce: | awk -F ': ' '{print $2}' | tr -d '\n\r')"

も同様に

    nonce="$(http_request head "${CA_NEW_NONCE}" | grep -i Replay-Nonce: | awk -F ': ' '{print $2}' | tr -d '\n\r')"

に書き換えましたが、参考にしたバグレポートにはこちらは書いていなかったので、不要かもしれません。

参考

感想

30 日の余裕があるので、ある程度落ち着いて対処できてよかったです。

Debian や Ubuntu の安定版を使っていても、外部サービスに依存しているものは外部サービスの変更で動かなくなることがあるので、 unattended-upgrades などを使っていても完全放置はなかなか難しいようです。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published