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」をコメントアウトした。
#
# 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アプリに接続できなくなった。(当たり前だ)