LetsEncrypt でRedmineを常時SSL化して運用しているが、証明書が自動更新されていないのでログを確認してみました。ログの見方といってもよいですが、更新されたかどうかについてをログから確認する場合に、どこをみればよいの?という点で備忘録がてらメモを残します。
LetsEncrypt のログの見方
ログの保存場所
まずは保存場所ですが、いたって普通に以下です。
1 2 3 4 5 6 7 8 9 10 11 12 |
# ls -ltr /var/log/letsencrypt -rw-r--r-- 1 root root 29658 Oct 2 19:30 letsencrypt.log.10 -rw-r--r-- 1 root root 5800 Oct 8 01:00 letsencrypt.log.9 -rw-r--r-- 1 root root 5800 Oct 15 01:00 letsencrypt.log.8 -rw-r--r-- 1 root root 22639 Oct 22 01:00 letsencrypt.log.7 -rw-r--r-- 1 root root 22639 Oct 29 01:00 letsencrypt.log.6 -rw-r--r-- 1 root root 22639 Nov 5 01:00 letsencrypt.log.5 -rw-r--r-- 1 root root 22639 Nov 12 01:00 letsencrypt.log.4 -rw-r--r-- 1 root root 22639 Nov 19 01:00 letsencrypt.log.3 -rw-r--r-- 1 root root 22640 Nov 26 01:00 letsencrypt.log.2 -rw-r--r-- 1 root root 38593 Dec 3 01:00 letsencrypt.log.1 -rw-r--r-- 1 root root 22348 Dec 7 11:42 letsencrypt.log |
これ、ローテートされているように見えるんですが、更新時に実行する certbot コマンドによって行われていて、1回実行するたびにファイル末尾の数字が更新されて新しい letsencrypt.log.1 ができあがります。そしてデフォルトでは削除されないようです。↑では10ファイルほどしか記載していませんが、5ヶ月くらい前までのログが残っている状態でした。1年くらい待てば消えてくれるのか??
ログのローテーションについてはいったん置いておいて話を進めます。
ログの確認箇所
まず、更新が成功した時のログを確認します。
以下のように DEBUG:certbot.storage:Writing をキーにして grep すると新しい秘密鍵や証明書が作成されたことがわかります。
1 2 3 4 5 6 7 |
# grep 'DEBUG:certbot.storage:Writing' letsencrypt.log 2017-08-10 04:20:24,121:DEBUG:certbot.storage:Writing new private key to /etc/letsencrypt/archive/hogehoge1.com/privkey2.pem. 2017-08-10 04:20:24,121:DEBUG:certbot.storage:Writing certificate to /etc/letsencrypt/archive/hogehoge1.com/cert2.pem. 2017-08-10 04:20:24,121:DEBUG:certbot.storage:Writing chain to /etc/letsencrypt/archive/hogehoge1.com/chain2.pem. 2017-08-10 04:20:24,122:DEBUG:certbot.storage:Writing full chain to /etc/letsencrypt/archive/hogehoge1.com/fullchain2.pem. 2017-08-10 04:20:24,335:DEBUG:certbot.storage:Writing new config /etc/letsencrypt/renewal/hogehoge1.com.conf.new. |
更新が失敗した場合は↑のメッセージは表示されません。
その場合は、以下のコマンドでエラーの内容を確認します。証明書を複数使用している場合でも以下のように対象のドメインとエラーの内容が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# grep -A 4 "Domain:" letsencrypt.log.1 Domain: hogehoge1.com Type: connection Detail: Fetching http://hogehoge1.com/.well-known/acme-challenge/XXXXXXXXXXXXXXXX: Error getting validation data To fix these errors, please make sure that your domain name was entered correctly and the DNS A record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided. -- Domain: hogehoge2.com Type: connection Detail: Fetching http://hogehoge2.com/.well-known/acme-challenge/XXXXXXXXXXXXXXXX: Error getting validation data To fix these errors, please make sure that your domain name was entered correctly and the DNS A record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided. |
オプションの -A 4 は指定した文字列の4行後ろまで表示するよ、というものです。
エラー内容は、To fix these~ から始まる部分です。エラー内容の訳は以下。
To fix these errors, please make sure that your domain name was entered correctly and the DNS A record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided.
これらのエラーを修正するには、ドメイン名が正しく入力され、そのドメインのDNS Aレコードに正しいIPアドレスが含まれていることを確認してください。 また、お使いのコンピュータがパブリックにルーティング可能なIPアドレスを持っており、ファイアウォールがサーバとクライアントとの通信を妨げていないことを確認してください。 Webrootプラグインを使用している場合は、指定したWebルートパスからファイルを提供していることも確認する必要があります。
今回更新できていなかった原因はファイアウォールでした。特定のIPアドレスからのみ接続を許可というふうに firewalld で制限しているので、LetsEncrypt からサイトに接続の確認ができずに更新ができていなかったという状況です。
現状、certbot コマンドを cron で回しているのですが、このエラーを回避するためには firewalld無効→certbotで更新→firewalld有効 のスクリプトを書かないといけなさそうです。。。それとも3ヶ月に1回なので手動でやっていくか。。。
この問題はおいおい考えるとして、これで LetsEncrypt のログから正常に更新ができたか、できていない場合はエラーの内容の特定ができるかと思います。
以上です。
↓↓↓ 持っていると便利な一冊。