[CentOS7] Let’s Encryptのインストールと自動更新

2019/04/14

Let`s Encrypt の導入

サイトのSSLが常識となってきているので、ホームページを立ち上げる場合はSSLが必須となってきました。 SSLの料金は業者によってまちまちですが結構お高いので無料のLet’s Encryptが最近?はやりですのでその導入手順を記載します。

環境

  • CentOS7.4
  • Apache 2.4.6

パッケージインストール

証明書のインストール・設定等の管理を行うcertbot本体と、Apacheのプラグイン(自動更新で使用)をインストールします。

$ sudo yum install sudo yum install epel-release
$ sudo yum install certbot python-certbot-apache

サーバ証明書の取得

※ 事前準備としてApacheが稼働しており、アクセス可能な状態にしておく必要があります。(ポート80と443の両方)

各コマンドの設定値の例配下となります

項目
ドメイン example.jp
ドキュメントルート /var/www/html
メールアドレス hoge@example.jp 鍵を紛失した際の復旧や証明書の有効期限が近づいた場合の通知で使用されるみたい
$ sudo certbot certonly --webroot -w /var/www/html -d example.jp -m hoge@example.jp

※ www.example.jpも取得する場合は -d で繋げます。

$ sudo certbot certonly --webroot -w /var/www/html -d example.jp -d www.example.jp -m hoge@example.jp

コマンドが正しければ利用規約の同意を求められるので受け入れて下さい。

成功すると取得した証明書関連のファイルの保存場所や有効期限などが表示されるので確認しておきましょう。 ※有効期限は3か月なので注意!(自動更新方法は後述)

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.jp/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.jp/privkey.pem
   Your cert will expire on 2018-10-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

なお各証明書の保存場所の「live」以下のファイルはシンボリックリンクになっています。 実際にApacheの設定をする際は、上記パスを指定するのですが、これは、自動で証明書を更新した際に新しいファイルへのシンボリックリンクのリンク先パスが更新されるためです。直接シンボリックリンク先のファイルを設定すると自動更新しても古い証明書を参照してしまうので注意しましょう。

Apacheの設定

Apache2.4.8以上

SSLCertificateFile /etc/letsencrypt/live/example.jp/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.jp/privkey.pem

Apache2.4.8未満

SSLCertificateFile /etc/letsencrypt/live/example.jp/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.jp/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.jp/privkey.pem

Apache再起動

sudo systemctl restart httpd

証明書の自動更新

自動更新も簡単にできるようになっています。ありがたい! サーバ上の証明書を一括で更新する場合。 ※ 複数ドメインを管理している場合などは個別に後述の個別に実行する方法がいいです。

$ sudo certbot renew

更新するドメインを指定する場合

$ sudo certbot certonly -d example.jp -d www.example.jp

Cronに仕込む場合は、Apacheの再起動とApacheプラグインを使用するようにオプションも追加します。Crontの実行タイミングは自由だと思いますが、30日を切らないと更新されません。 私は毎月1日に実行するようにしました。期限切れ30日前にならないと更新処理は無視されます。

$ certbot certonly -n --apache -d example.jp -d www.example.jp --post-hook "systemctl restart httpd"

以上です。 参考サイト: https://letsencrypt.jp/docs/using.html