CentOS7 で Let's Encrypt を使って無料の SSL 証明書を取得したので実行したコマンドなどをメモ。3ヶ月で有効期限が切れるので、更新を自動化する方法も紹介します。
目次
Certbot クライアントをインストール
Certbot クライアントのインストール - Let's Encrypt 総合ポータル を参考に Cerbot クライアントをインストールします。Centos7 の場合は以下のコマンドでインストールできます。
$ sudo yum install epel-release
$ sudo yum install certbot
SSL 証明書を取得する
SSL/TLS サーバ証明書の取得 を参考に証明書を取得します。
ファイアーウォールで 80 と 443 ポートを開けて、Apache や Nginx などの Web サーバを停止してから以下コマンドを実行。初回実行時はメールアドレスの入力と利用規約への同意を求められるので入力します。
$ certbot certonly --standalone -d www.example.com
複数の FQDN で使える証明書を取得したい場合は以下のようなコマンドで。
$ certbot certonly --standalone -d www.example.com -d www2.example.com
マニュアルによると、Web サーバが動いている状態でも以下のコマンドで取得できるようですが、WordPress が動いている私の環境では動作せず。
$ certbot certonly --webroot -w /var/www/www.example.com -d www.example.com
コマンドが正常終了すると、/etc/letsencrypt/live
以下に最新版の証明書へのシンボリックリンクが作成されるので、Nginx などの Web サーバに設定します。Nginx の場合の最小設定はこんな感じ。
server {
listen 443 ssl;
server_name {{ cashbook.host }};
root /var/www/www.example.com/current/web;
ssl_certificate /etc/letsencrypt/live/www.example.com/privkey.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/fullchain.pem;
}
SSL 証明書の更新を自動化する
証明書は 3 ヶ月で有効期限が切れるので、以下コマンドで更新します。以下のコマンドを実行しても、有効期限の 1 ヶ月前になるまでは何も起こりません。 1 ヶ月前になると新しい証明書をダウンロードしてきて、Nginx を再起動してくれます。私は cron で週に 1 回実行するようにするようにしました。
$ sudo certbot renew --pre-hook 'service nginx stop' --post-hook 'service nginx start'