Let’s Encryptの証明書の再発行

let`sencryptBackEnd

let`s encryptの期限が差し迫ってきたので、更新をしようと思って面白そうなので勉強のため一度削除してから再度証明書を発行してcronで自動化までしたときの作業メモです。

作業環境
# php -v
PHP 7.3.18 (cli) (built: May 12 2020 08:04:33) ( NTS )

# httpd -v
Server version: Apache/2.4.6 (CentOS)

# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
スポンサーリンク

Let’s Encryptの証明書を削除する

証明書一覧を表示する

certbot certificates


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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: hoge.com
    Domains: hoge.com
    Expiry Date: 2020-08-26 04:42:36+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/hoge.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/hoge.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

証明書を名前指定で削除する

certbot revoke

certbot revoke --cert-name=hogehoge

途中で証明書の削除をするか聞かれるので「Y」を選択します。

証明書の削除を行った場合、ssl.confなどに証明書のパスの記述が残っているとapacheが再起動できなくなるので注意です。
証明書パスを指定している下記コードを削除かコメントアウトをして、存在しないファイルを読み込まないようにします。

#SSLCertificateFile /etc/letsencrypt/live/hogehogr.com/cert.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/hogehogr.com/privkey.pem
#SSLCertificateChainFile /etc/letsencrypt/live/hogehogr.com/chain.pem

apacheのエラー対処方法

ELFADSC00296_TP_V
systemctl status httpd
systemctl restart httpd

すこし寄り道。
apacheの設定を変更した時等で再起動するとエラーになるなんて稀によくあることです。
とくにサービス中のサイトであれば一刻も早く復旧させないと困りますよね。
そんな時に便利なコマンドがあります。

下記コマンドでエラー箇所をほぼ特定できます。

service httpd configtest

syntaxOK!と表示されたらapacheの起動、再起動は正常に完了するでしょう。

新規証明書取得

今回はapacheを起動した状態で取得、更新したいのでwebrootプラグインを指定します。

certbot certonly

certbot certonly --agree-tos --webroot -w /var/www/html/ -d example.com

オプション

certonly

SSL/TLS サーバ証明書の取得のみを行います。証明書のインストール(サーバソフトウェアの設定)は行われません。

-d DOMAIN もしくは –domains DOMAIN もしくは –domain DOMAIN

SSL/TLS サーバ証明書の取得を申請するドメイン名を指定します。複数のドメイン名を指定する場合、-d example.jp -d www.example.jp のように -d フラグを複数回指定します。また、-d example.jp,www.example.jp のようにカンマ( , )で区切ったリストをパラメータとして指定する方法もあります。
(デフォルト: [])

–agree-tos

ACME 利用規約に同意します。このオプションを有効にした場合、過去に利用規約の同意を行ったことがない場合であっても、利用規約の同意を求める画面が表示されません。
(デフォルト: False)

–webroot

ウェブサーバの DocumentRoot ディレクトリ以下に認証用のファイルを設置することでドメイン使用権者の認証を行って、SSL/TLS サーバ証明書を取得します。
(デフォルト: False)

参考サイト

コマンド解説 - Let's Encrypt 総合ポータル

証明書更新

自動更新用にまずは手動で更新コマンドを確認します。

実際に更新コマンドをたたく前に確認してみます。dry-runオプションを付けることで試しに実行してくれます。

certbot renew

certbot renew --dry-run

オプション

renew

取得済みの SSL/TLS サーバ証明書のうち、有効期限が近い証明書を自動的に更新します。

–dry-run

クライアントソフトウェアをテスト実行して、テスト用の SSL/TLS サーバ証明書(信頼されていない無効な証明書)の取得を試みます。取得したテスト用の SSL/TLS サーバ証明書は、ディスク(HDD や SSD など)に保存されません。
このオプションは、今のところ、サブコマンド certonly もしくは renew と併せて使用する必要があります。
注意: –dry-run は、システムに対する永続的な変更をなるべく加えないように設計していますが、完全ではありません。もし、ウェブサーバ(Apache や nginx)のオーセンティケータプラグインと一緒に使用した場合、テスト用の SSL/TLS サーバ証明書を取得するために一時的なウェブサーバの設定変更とウェブサーバのリロードが行われた後、ウェブサーバの設定変更がロールバックされます。
正確に証明書の更新をシミュレーションするため、–pre-hook や –post-hook コマンドが定義されていた場合には、それらが呼び出されることがあります。–renew-hook コマンドは呼び出されません。
(デフォルト: False)

参考サイト

コマンド解説 - Let's Encrypt 総合ポータル

試しに実行する

cronで実行するコマンドも念のため手動でたたいて様子を見ます。

certbot renew --force-renew --dry-run --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"

証明書更新自動化

crontabに設定を記述します。念のためテスト用に一回実行してみて、大丈夫そうなら本番用の記述に変更します。

crontab -e

# crontab -e
#バッチテスト用
00 04 07 * * root /bin/certbot renew --force-renew --dry-run --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"
#実行用
00 04 01 * * root /bin/certbot renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"

crontabのオプションには間違って -r をつけないように細心の注意で扱いましょう。

コメント

タイトルとURLをコピーしました