Let’s Encryptは無料でサーバー証明書が発行できるけど、証明書の有効期間が90日間と非常に短い。
3か月ごとにサーバー証明書の更新作業が必要になると考えると荷が重いですよね。
証明書更新をすっぽかしてしまうと、当然だけど証明書エラーでサイトが表示できなくなってしまいます。
「忘れちゃいけないけど単純な作業」は自動化したいですよね。
そこで、今回はLet’s Encryptのサーバー証明書を自動的に更新する方法をまとめます。
Let’s Encryptの有効期限はなぜ短いのか?
Let’s Encryptの発行するサーバー証明書は、90日間という短い有効期限です。
有償のサーバー証明書を買うと、有効期間は1年間がほとんど。
「サーバー証明書を更新する頻度も増えてしまうので面倒!」と思ってしまいますが、それにはちゃんとした理由があります。
1つ目は、万が一、セキュリティ事故が起きたときの被害を少なくできるという点。キーが盗まれたりしても、その影響期間は最大で90日間までに抑えられます。
そして2つ目は、サーバー証明書の自動更新をしてくれる人が増えるという点。このページを見ているということは、まさしくLet’s Encryptの思惑通りです!
では、自動更新を設定してみましょう。
cronを設定
サーバー証明書の延長処理を行うcertbot renew
コマンドを定期的に実行すればOK。
以下、cronを使って週に1回、サーバー証明書更新を自動実行する例です。
※本記事では、CentOS 7.2での設定手順を説明します。
- まず、サーバーにSSHで接続し、rootになります。
- ファイル
/etc/cron.weekly/certbot
を作成します。
# vi /etc/cron.weekly/certbot
- 次のようなスクリプトを入力し、保存します。
#!/bin/bash
certbot renew &> /dev/null
- 実行権限を付与します。
# chmod +x /etc/cron.weekly/certbot
サーバー証明書自動更新の動作確認
cronの設定が終わったら、正しく証明書更新できるか、試してみましょう。
cronが実行されるまで1週間も待てないので、以下のコマンドで直接スクリプトを実行してみます。
# /etc/cron.weekly/certbot
certbotの実行ログは /var/log/letsencrypt/letsencrypt.log に出力されます。
次のようなメッセージがログに出力されていれば、サーバー証明書の更新処理が動作していることになります。
2018-07-25 23:17:06,897:DEBUG:certbot.main:certbot version: 0.23.0
2018-07-25 23:17:06,897:DEBUG:certbot.main:Arguments: []
2018-07-25 23:17:06,897:DEBUG:certbot.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#apache,PluginEntryPoint#manual,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2018-07-25 23:17:06,910:DEBUG:certbot.log:Root logging level set at 20
2018-07-25 23:17:06,910:INFO:certbot.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2018-07-25 23:17:06,921:DEBUG:certbot.plugins.selection:Requested authenticator <certbot.cli._Default object at 0x7fc78b9d9bd0> and installer <certbot.cli._Default object at 0x7fc78b9d9bd0>
2018-07-25 23:17:06,928:INFO:certbot.renewal:Cert not yet due for renewal
2018-07-25 23:17:06,929:DEBUG:certbot.renewal:no renewal failures
「Cert not yet due for renewal」というメッセージが出ていますが、これはサーバー証明書の更新の必要がないという意味です。renewal
コマンドは、30日以内に期限切れになるサーバー証明書のみ更新するので、まだ期限まで余裕があるサーバー証明書の場合に、このようなメッセージが表示されます。
期限まで30日以内のサーバー証明書の場合、次のようなメッセージが表示され、サーバー証明書が更新されます。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/egatech.net.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for egatech.net
Waiting for verification...
Cleaning up challenges
-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/egatech.net/fullchain.pem
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/egatech.net/fullchain.pem (success)
-------------------------------------------------------------------------------
また、certbot certificates
コマンドを実行すると、証明書の有効期限が分かります。
# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Found the following certs:
Certificate Name: egatech.net
Domains: egatech.net
Expiry Date: 2018-09-24 14:00:41+00:00 (VALID: 60 days)
Certificate Path: /etc/letsencrypt/live/egatech.net/fullchain.pem
Private Key Path: /etc/letsencrypt/live/egatech.net/privkey.pem
-------------------------------------------------------------------------------
まとめ
certbotコマンドはサーバー証明書の更新処理までできるので本当に便利!
有償のサーバー証明書は使わなくなっちゃいますね。
コメント