Let’s EncryptのTLS(https)証明書を取得するのにcertbotというツール(コマンド)がよく使われますが、今回は legoというツールを紹介します。
GO製ツールで実行ファイルはシングルバイナリファイルのため、インストールも簡単です。GitHubのリリースページから対象のOSやアーキテクチャのtar.gzファイルをダウンロードし、展開して出てくるlegoファイルを、Linuxなら/usr/local/bin/辺り(PATHが通ったディレクトリ)に放り込むだけです。
すでにWebサーバが構築されており、そのサーバにドメインが割り当てられている場合、以下のようなコマンドで証明書を取得できます。
# lego --accept-tos --http --http.webroot /var/www/html/ --domains example.com --path /etc/lego/ --email root@example.com run
/var/www/html が、Webサーバのドキュメントルートです。example.com がサーバのドメイン名で、root@example.com がメールアドレスです。取得した証明書は、–path で指定した/etc/legoに保存されます。各引数の値は、適宜環境にあわせて修正してください。
実行すると、上記で指定した/var/www/html ディレクトリに、.well-known というディレクトリが作成され、Let’s Encrypt がドメインの所有者有無を確認するためのファイルが配置されます。
証明書保存先の/etc/lego/ には、certificates というディレクトリが作成され、ドメイン名が付与されたファイルが4つ作成されます。
# ls /etc/lego/certificates/ /etc/lego/certificates/example.com.crt /etc/lego/certificates/example.com.json /etc/lego/certificates/example.com.crt /etc/lego/certificates/example.com.key
あとは、自身のWebサーバで上記証明書を指定すれば、Let’s Encryptの証明書が使えるようになります。
Let’s Encryptの証明書は3ヶ月で期限が切れるため、定期的に更新が必要になります。証明書の更新は、runの代わりにrenewを使います。
# lego --accept-tos --http --http.webroot /var/www/html --domains example.com --path /etc/lego/ --email root@example.com renew --days 30 --renew-hook /usr/local/bin/restart-server.sh
更新を頻繁に実行すると制限にひっかかってしまいますので、上記では–days 30を指定して、証明書の期限が30日を切った場合に更新処理が実行されるように設定しています。–renew-hook では、更新後に実行するスクリプトを指定します。ここでは/usr/local/bin/restart-server.sh(予め作成)を指定し、Webサーバを再起動しています。この処理を1ヶ月に1回ぐらいcron等で実行してあげれば、自動で証明書の更新も可能です。