#Let's Encryptとは
詳しい説明はこちら。要は、
- 無料で
- 自動更新できる
- SSL証明書導入システム
#環境
- AWS Amazon Linux
- Apache 2.4.23
#手順
全部rootでやってますが、適宜読み替えてください。
##Let's Encryptのインストール
sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto
##証明書の作成
sudo /usr/bin/certbot-auto certonly --webroot -w /var/www/html --email test@example.com --debug -d test.example.com
- 必要があれば、関係するパッケージが更新・インストールされる。その場合は、再度上のコマンドを入れないといけないかも。
- dオプションでドメインを指定するが、
-d example.com -d test.example.com
のように複数指定できる。最初に記述したドメインがコモンネームになる。- ちなみに、指定するすべてのドメインは、このサーバに向いたAレコードを持っていないといけない。
- wオプションでドキュメントルートディレクトリを指定する。ドメインごとに別のドキュメントルートディレクトリを指定したいときには、-dオプションの直前に-wオプションを書けば良い。
- すべて完了すると、 下記のパスに証明書と鍵が発行される。
/etc/letsencrypt/live/test.example.com/fullchain.pem
/etc/letsencrypt/live/test.example.com/privkey.pem
##証明書の指定
ここは、通常のApacheの指定と変わらない。nginxでも同様でしょう。例えば下記のような感じ。
sudo vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/test.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.example.com/privkey.pem
で、サーバ再起動。ブラウザで開いて確認しましょう。
sudo service httpd restart
##自動化
Let's Encryptは3ヶ月しか有効期限がないので、自動更新するとよい。更新のためのコマンドをcronする。
まず、下記のコマンドが正常に動作し、証明書が更新されるかをテスト。
sudo /usr/bin/certbot-auto renew --post-hook "sudo service httpd restart"
renewは、すべての証明書を更新するコマンド。--post-hookオプションで指定したコマンドは、renew後に実行される。ただし、renewは期限が迫らないうちは、実行がスキップされ、その場合はpost-hookも実行されない。
いまは証明書を発行したばかりなので、下記のように表示されれば、問題なし。
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/test.example.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/test.example.com/fullchain.pem (skipped)
No renewals were attempted.
No hooks were run.
OKなら、cronに登録する。まずcronが動いているか確認しよう。
/etc/rc.d/init.d/crond status
cronに登録するファイルを作成し、以下を記入する。
※crontab -e
はつかっちゃだめ。ぜったい。
sudo vi /etc/cron.d/letsencrypt
00 16 * * 2 root /usr/bin/certbot-auto renew --post-hook "service httpd restart"
この例では、毎週火曜の16時にrenewが起動する。
設定が終わったら、実際に起動して更新されるか、期限30日前の火曜に確認しよう。
ちなみに最近は…
Wordpressを構築するときなどは、上記のようなゼロからの構築はあんまりしていなくて、
Kusanagiのプロビジョニング過程で自動的にLet's Encryptが設定される、というのを利用しています。超ラク。
Kusanagiは無料、簡単、速いという三拍子揃っていて素晴らしいのでWordpress構築時にはみんな使うと良いと思う。