Help us understand the problem. What is going on with this article?

Let's Encryptの自動更新されないので期限確認とcronのログ出力をして原因特定

More than 1 year has passed since last update.

ブログ記事のコピーです。

Let's Encryptの証明書の自動更新の設定をしたはずなのになかなかされないのでどうしたものかと思って追加調査。

SSL証明書の有効期限の確認

有効期限の確認には以下のコマンドで

# openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -dates
notBefore=Dec 13 01:29:44 2018 GMT
notAfter=Mar 13 01:29:44 2019 GMT

example.comが設定したドメインに置き換わります。notBeforeが作成日時で、notAfterが有効期限。

cronのログ

デフォルトの/var/log/cronには実行ログしか出力されないので、自動実行された命令のどこでコケているのか判別が付きません。ということで、ログを出力するようにします。

23 1 * * * root sudo /root/certbot-auto renew --post-hook "sudo service httpd reload" > /path/both.log 2>&1

/path/both.logは実際にログを出力したい場所とファイル名を指定。2>&1で標準出力とエラー出力の双方をファイルに書き込むように。

この結果……

sudo: sorry, you must have a tty to run sudo

とファイルに書き込まれていました。調べてみたら「sudoするときはTTY経由じゃないとダメだよ!」ということのようです。

解決策として/etc/sudoers

Defaults    requiretty

の行をコメントアウトすれば大丈夫、とのことだったのですが。逆にデフォルトでTTY必須にしているのはセキュリティ対策としての理由なのでこれを無効にするのはちょっと……。


じゃあどうするか、ということですが、通常であれば特定のユーザのみTTY無効という設定を加えて最低限しか崩さないようにするのがベターと思われます。しかし、今回はそもそもrootなので(それ自体どうなの、というのはありますが)sudoしなくても動くのでは、と。そのため、

httpd reload > /path/both.log 2>&1

sudoを外すと、ログが下記のように(※証明書が更新された後に実行したため、「期限になっていないのでスキップした」というログになっています)。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Non-interactive renewal: random delay of 11 seconds

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/example.com/fullchain.pem expires on 2019-03-13 (skipped)
No renewals were attempted.
No hooks were run.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

これで動くようになったことが確認できました。最終的にはログ出力なしで

23 1 * * * root /root/certbot-auto renew --post-hook "sudo service httpd reload"

となりました。

参考

arm_band
フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。
https://labor.ewigleere.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away