Hirooooo’s Labo

開発メモ、ガジェット、日記、趣味など、思った事を思ったまんま書くブログ

Let's Encryptを使用したサーバーのSSL証明書を更新する方法

f:id:hirooooo-lab:20190612174345p:plain

以前Let's Encryptを使用してNginxにSSL接続を行う方法を書きましたが、Let's EncryptSSL証明書は有効期限が3ヶ月で終了してしまいます。
なので、有効期限が切れる前にSSL証明書の更新が必要なのですが、今回は手動で更新する方法を書きます。

前提条件

Let's Encryptを使用したサーバーが立ち上がっており、SSH接続でWebサーバーに接続できるのを前提として書きます。
サーバーの構築方法や、Let's EncryptでCentOSにNginxのWebサーバーにSSL接続を行う方法は過去記事を参照ください。

www.hirooooo-lab.com

また、cronで自動更新する方法もありますが、今回は手動で更新する方法のみを書きます。

SSL証明書更新準備

SSL証明書の有効期限を確認する

Let's EncryptのSSL証明書は有効期限の30日未満から更新が可能となります。
強制的に更新する方法もありますが、まずは有効期限の確認をしましょう。

SSL証明書有効期限確認コマンド

# sudo certbot certificates

実行するとこんな感じで有効期限が表示されます。

# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: hirooooo-lab.com
    Domains: hirooooo-lab.com
    Expiry Date: 2019-09-01 01:30:18+00:00 (VALID: 22 days)
    Certificate Path: /etc/letsencrypt/live/hirooooo-lab.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/hirooooo-lab.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

※ここではドメインは[hirooooo-lab.com]としておきます。

更新のdry-run(リハーサル)

実際にLet's EncryptのSSL証明書の更新を行う前に、リハーサル更新を行ってエラーの有無を確認します。
dry-run(リハーサル)では実際には証明書の更新は行われません。

リハーサルコマンド

# sudo certbot renew --dry-run

--dry-runというオプションによりリハーサルとなりますので、忘れずにつけましょう。

実行するとズラーッと下記のように表示されると思います。

# certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/hirooooo-lab.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for  hirooooo-lab.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/ hirooooo-lab.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/ hirooooo-lab.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - 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.

ここで重要なのは
Congratulations, all renewals succeeded. The following certs have been renewed:
と表示されていればリハーサルは成功です。

SSL証明書更新の実行

有効期限の確認やリハーサルでエラーなしを確認したら実際にLet's EncryptのSSL証明書を更新してみましょう。

Let's EncryptのSSL証明書更新

更新コマンドはリハーサルのコマンドから--dry-runを取り除いたコマンドとなります。

# sudo certbot renew 

このコマンドでは有効期限が30未満となっているときに更新可能となります。
実際に更新してみるとこうなります。

# certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/hirooooo-lab.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for hirooooo-lab.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/hirooooo-lab.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/hirooooo-lab.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

実際の更新でもCongratulations, all renewals succeeded. The following certs have been renewed:が表示されれば更新成功となります。

更新後の有効期限の確認

更新が完了したら再度有効期限の確認をしてみましょう。

# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: hirooooo-lab.com
    Domains: hirooooo-lab.com
    Expiry Date: 2019-11-07 02:25:28+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/api.o-kami.info/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/api.o-kami.info/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

有効期限が3ヶ月更新されたのが確認できると思います。

強制的に更新する方法

certbot renewコマンドでは有効期限が30日未満の場合に更新が可能ですが、30日以上の場合に強制的に更新するには--force-renewオプションを付けて実行します。

# sudo certbot renew  --force-renew

Webサーバーの再起動を忘れずに

Let's EncryptのSSL証明書の更新が完了したらWebサーバーの再起動が必要です。
Nginxの場合は忘れずに以下の再起動コマンドを実行しましょう。

$ sudo systemctl restart nginx

これでLet's Encryptを使用したNginxのWebサーバーのSSL証明書を更新が完了です。
あとはまた3ヶ月の有効期限が切れる前にSSL証明書の更新を行いましょう。

自動更新の参考リンク

手動で実行するのが面倒な人は、cronを使用した自動更新のしかたがあるのでこちらのリンクとかを参考にやってみてください。

無料のSSL証明書Let's Encryptを設定・更新・自動更新する方法(CentOS7, Apache2.4対応) | プログラミング入門ナビ

Let's Encryptを使ってSSL証明書を自動更新する(AWS/Amazon Linux/Apache) - Qiita

[PR]レンタルサーバーや独自ドメインをお探しの方はこちらをどうぞ