普段開発で利用しているの一つにApacheのサーバがあるのですが、ブラウザでアクセスできなくなりました。
確認したらApacheが落ちていたのでApacheの再起動を試みたところ、以下のように表示され起動できなくなりました。
$ service httpd start
httpd を起動中: [失敗]
ログを確認
上記だけでは内容が全く無いのでログを確認します。
$ less /var/log/httpd/error_log
すると、以下のエラーログが大量に見つかりました。
[Tue Jan 05 03:41:07 2020] [error] SSL Library Error: -8181 Certificate has expired
[Tue Jan 05 03:41:07 2020] [error] Unable to verify certificate 'Server-Cert'. Add "NSSEnforceValidCerts off" to nss.conf so the server can start until the problem can be resolved.
...
はて?SSLは使ってないぞ?と思いつつログの内容を読んでみると、
証明書の期限切れ。と書いてあります。
証明書の'Server-Cert'が確認できないよ。nss.confに"NSSEnforceValidCerts off"を追加すれば、とりあえずサーバは起動できるよ。
ただ、言われるがままにNSSEnforceValidCerts
という未知のオプションを追加するのも怖いので調べてみました。
すると同じ現象に関する記事がたくさん出てきました。特に以下のページは詳しく書かれています。
mod_nss
の証明書の有効期限切れのようです。確かについ最近切れていますね。
$ certutil -L -d /etc/httpd/alias -n Server-Cert
Validity:
Not Before: Tue Jan 04 12:10:18 2016
Not After : Sun Jan 04 12:10:18 2020
NSSEnforceValidCertsを追加
今回の環境ではmod_nss
は利用していないので、NSSEnforceValidCerts
を設定してしまいます。
# cd /etc/httpd/conf.d
# cp nss.conf nss.conf.bkup
# vim nss.conf
(ファイル末尾にNSSEnforceValidCerts offを追記して保存)
# service httpd restart
無事にApacheを起動することができました。
割と有名な問題のようですが今回初めて知りました。 サーバによって有効期限が違うようなので、Apacheを利用している場合はあらかじめ確認しておいた方が良さそうです。