Let’s Encryptの設定 ubuntu & nginx
Ubuntu18.04とnginx の環境で実施しています。こんなに簡単に証明書が設定できてしまうのは散々苦労したことのある私としては衝撃ですね。。
Let’s Encryptというのはhttpを暗号化(https化)してくれるツールとサーバですね。個人運営のブログもhttps化しないといけない時代となっています。httpsの暗号化といってもオレオレ証明書ではダメで、ちゃんと認証局に登録されてないとダメなわけで、
これまでは証明書業者さんはいい値段を取っていたわけですが、https化するだけだったらこんなに簡単にできてしまうのはもう商売上がったりと思います。いろんな種類の証明書がありますが、個人ブログや小さい企業であればこれで十分ですね。
オフィシャルサイトはこちらです。
こちらを参考にしました。
https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx
前提条件
まずはWordpressをhttp(ポート80)でnginxで正しく設定している状態にしてください。
certbotをインストールします。
$ sudo apt-get install certbot
$ sudo apt-get install python-certbot-nginx
で実際に所有しているドメインに対して証明書をインストールします。example.comはご自身のドメインです。
$ sudo certbot --nginx -d example.com
httpからhttpsに転送設定するか聞かれますので、私は2を選択してリダイレクト設定してもらいます。
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
これで自動的に/etc/nginx/site-available/ 以下のconf ファイルに自動的にSSLの設定がされています。特にreloadしなくても設定されたようです。自動でhttp->httpsにリダイレクトされるようになりました。
あとはLetsEncrpytの証明書の有効期限が90日ですので、定期的に自動更新してやる必要があるかと思います。
$ sudo certbot renew
を定期的に実行設定でOKと思います。有効期限が30日以下になったら証明書が更新されます。30日以上ある場合は何もせずにスキップされますね。ホストしている全部のサイトを一括で確認してくれるので、楽ですね。
ただ実際には–dry-run オプションをつけてエラーなく更新できるか検証してみたほうが良いみたいですね。–dry-runをつけると失効が近くなくても更新をシミュレートして検証してくれますね。–dry-runつけない場合、失効予定30日以内の証明書がない場合は
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem expires on 2019-07-25 (skipped)
No renewals were attempted.
と出てきてますので、エラーがあるのかわからないですね。更新直前にエラー出てきても困るかと思いますので、–dry-runでの検証は必須ですね。
$ sudo certbot renew --dry-run
いくつかドメインが失効したサイトも含んだ状態で上記コマンドを実行してみましたが、ちゃんとドメインが失効したサイトについてはこんなエラーがでましたね。example.comドメインは実際は失効したドメイン名です。
Domain: example.com
Type: unauthorized
Detail: Invalid response from
http://example.com/.well-known/acme-challenge
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.
この場合は /etc/letsencrypt/renewal 以下のドメインの失効したサイトの.confファイルを削除してやればrenewでエラーでなくなりますね。
crontab への登録は
$ sudo crontab -e
で、毎週日曜0時0分に実行するとすると
0 0 * * 0 /usr/bin/certbot renew
のようになりますでしょうか。