Memorandum

普段の生活の覚え書き。主に技術録

SSL証明書更新

申し訳ありません! SSL証明書の期限が切れていて「安全なサイトではない」と表示されてしまう状態でした。m( )m

SSL証明書が切れるとどのような状態になるのかを確認したらすぐ戻すつもりでしたが、期限切れから2日ぐらい放っていました。

今回はその反省の込めて、SSL証明書の自動更新を設定していこうと思います。

Let’s Encrypt

このサイトでは誰でも無料で使えるSSL/TLS証明書発行サービスのLet's Encryptを利用しております。

https://letsencrypt.org/

Let's Encryptの他にもSymantecやGlobalSign、SECOMなどのSSL証明書認証局があり、年間数万円ぐらいかかります。 またレンタルサーバVPSなどによっては設定を行うだけで自動的にSSL対応してくれるサービスもあります。

今回は一からインストールと設定を行いましたので、その設定方法と更新手順をご紹介します。

インストール

Let's Encryptを利用するために、Certbotクライアントと呼ばれるソフトウェアインストールする必要があります。 私の環境は、CentOS 7、Apacheなので下記のコマンドでインストールします。

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

下記の事項が行われていることが前提です。

  • Apache httpd がインストール済み
  • インターネットから80番ポートに公開しているホームページにアクセスできること

SSL/TLS証明書の作成

SSL証明書の取得には下記コマンドで実行できます。 (XXXXXX.netの部分は自分が取得したドメインに置き換えてください)

$ certbot --apache -d XXXXX.net

コマンドを実行すると対話式で処理が進みますので、適宜対応してください。(メールアドレスの入力や利用条件への同意などがあったと思います)

恐らくこれだけで、HTTPS通信が行える環境になっているはずです。

自動更新の設定

Let's Encryptで取得できるSSL証明書の有効期限は90日になっていますので、その度に更新する必要があります。(期限が近づくとメールが送られてきます)

手動更新をしていると忘れてしまう可能性がありますので(今回のケースのように...)、自動更新の設定をすることをお勧めいたします。

更新する方法はいくつかありますが、今回はcronと呼ばれる定期的に実行してくれるプログラムに登録します。

cronに設定する前に、シミュレーション実行する--dry runオプションをつけて検証することをおすすめします。

$ certbot renew --dry-run

シミュレーション結果がCongratulations, all renewals succeeded.と表示されて、問題ないことを確認したら、cronに登録します。 (証明書の更新はroot権限が必要です)

$ crontab -u root -e

今回は毎月1日の4:00に証明書を更新するように設定します。 (cronフォーマット:分 時 日 月 曜日 コマンド)

# 証明書の更新のみ
$ 00 04 01 * * certbot renew

# 証明書の更新とWEBサーバの再起動
$ 00 04 01 * * certbot renew && systemctl restart httpd

最後にcronに登録されている一覧を確認して終了です。

crontab -l

おわりに

これでSSL証明書の更新忘れがなくなると思います。一度設定してしまうとなかなか触れる機会がないので、備忘録として残しておきました。