Let's Encryptが自動更新されていなかった


3ヶ月前に導入したLet's Encryptだが、なぜか自動更新されていなかった。
一応解決したので備忘録として投稿しておく。
Qiitaに上げるつもりはなかったので、スクショなどを取っていなかったのは反省点。

環境

ConoHa(CentOS8)

Apacheがおかしいことに気づく

・Let's Encryptの自動更新の設定をしていたはずだが、なぜか更新されていない。この記事を参考にして設定した記憶がある。
・エラー文を読んでもよくわからなかったが、どうもApacheがおかしいらしい(勘)
・以下のコマンドで調べてみるとApacheの起動が失敗していた。「Active: failed (Result: exit-code)」と表示された。

ターミナル
$ systemctl status httpd

・ステータスをよく読むと「(98)Address already in use」エラーが2つある。443番ポートはNode.jsで既に使用していたため、Apacheが起動できなかったようだ。

→Let's Encryptの更新にはApacheが必要なことに気づく(←アホ)

Apacheを立て直しLet's Encryptを更新

・Node.jsのプロセスを終了(今回は無理矢理killした)し、Apacheを再起動。今度は正常に動いた。その後Let's Encryptの手動更新を行ったら成功した。

▼Let's Encryptの手動更新

ターミナル
$ sudo certbot renew

プロセス削除の参考:Address already in use の対処法
※上記記事は古いhttpdプロセスが残っているのが原因だったが、私の場合はNode.jsのプロセスが443番ポートを使用していたことが原因だった。しかしプロセスの削除方法は同じ。

→Node.jsはApache上で動いているものだと思っていたが、独立して動くものだと理解した。

一応更新できたが…

・しかしこれでは、Let's Encryptを更新する度にNode.jsを止めてApacheを起動しなければならない。
・Apacheの443番ポートを使用しない設定にすれば、Node.jsと同時に起動出来る。(80番ポートだけ開けておく)
・「/etc/httpd/conf.d/ssl.conf」を書き換えた。「Listen 443 https」をコメントアウトした。

/etc/httpd/conf.d/ssl.conf
#
# When we also provide SSL we have to listen to the 
# standard HTTPS port in addition.
#
#Listen 443 https                  //←この行をコメントアウトする

##
##  SSL Global Context
##
##  All SSL configuration in this context applies both to
##  the main server and all SSL-enabled virtual hosts.
##

以下略

参考
Apacheの再起動時に(98)Address already in use が発生!2つの原因と対策

・Apache再起動後、Let's Encryptの強制更新が成功したので今度は大丈夫そう。次の自動更新は成功してほしい。

▼SSL証明書の有効期限に関わらず、強制的に更新する

ターミナル
$ sudo certbot renew --force-renew

参考
Let's EncryptのSSL証明書を手動で更新する方法

失敗談

Apacheの443ポートを塞ぐために、firewalldを書き換えてしまった。443ポートの接続をはじく設定にしたらWebアプリに接続できなくなった。(当たり前だ)