2020-01-08

tobijibu

Apacheが起動しない

普段開発で利用しているの一つに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という未知のオプションを追加するのも怖いので調べてみました。 すると同じ現象に関する記事がたくさん出てきました。特に以下のページは詳しく書かれています。

https://ecl.ntt.com/news/2016122801/

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を利用している場合はあらかじめ確認しておいた方が良さそうです。