phpstudy apache无法启动_Apache 因SSL Library Certificate has expired 无法启动

问题:

在运行的Apache(HTTPD) 服务突然无法启动。没有修改任何的配置文件,类似的问题,首先排除的是系统和服务日志,messages 和httpd下面的error.log都没发现报错信息。在httpd 服务中加入-x 排错标记,发现是httpd 执行失败,怀疑与Apache 上额外的模块有关。把/etc/httpd/conf.d中的文件都移走,HTTPD服务可正常启动。逐一排除,发现问题是nss.conf 配置导致的。

2bfd016a03754936b0e2e028e634ff89

运行:从一个终端运行tail -f /var/log/httpd/error_log 检测httpd启动日志记录,另一个终端运行server httpd start

e028deb4f9a94d76b0b4287c6b172a6d
af5d46a9f2584cc6994699a038d6289e

从报错错误来看是证书过期了。

一、问题分析

上述日志中已经提示,可加入NSSEnforceValidCerts off 禁止校验证书的参数来避免该问题。经确认,这是可行的。

先来看看mod_nss 模块是干什么用的?

# rpm -qi mod_nss

The mod_nss module provides strong cryptography for the Apache Web server via the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols using the Network Security Services (NSS) security library.

那证书的有效时间是多少呢?(4年)

53e05392376e46a29d6e1c9d15f4b62d

这是在安装mod_nss 包时生成的:

9a0ba66bc4f3431a9b7ba638bf343abc

由于这台机器部署的时间很早,证书在2018年9月3日到期了。但之前没有重启HTTPD服务,没发现问题。而在最近重启机器时,故障才显现出来。

二、解决问题

既然原因已知道,解决就很简单了,方法也很多:

1. 如果不需要用到mod_nss 模块的,那直接把/etc/httpd/conf.d/nss.conf 文件改名或删掉;

2. 不验证证书过期时间的,那就在nss.conf 中加入NSSEnforceValidCerts off 配置即可;

3. 最佳的方式,是重新生成新的证书;

(生成新证书前,务必先删除旧证书数据库文件)

a5b0d22beb35408390f1223468ef4830

#chmod 750 *.db(因为是在root下面操作的,生成的是权限是root权限)

#chown apache.apache /etc/httpd/alias/*.db

ce8f246b5a014b6badaf2df6892eef5c
a684fe9d119f478ba55721d72a48e768

4、重启httpd服务

7dd967b1608e481c81c538d6f77b3160