一、故障现象:
1、用户反馈http的网页打不开了(确认不是客户端的问题);
2、服务器端ps aux|grep httpd 发现进程没有起来;
3、service httpd start 启动失败
4、service httpd status 提示“httpd已死,但pid文件存在”
5、httpd的error日志
suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 每执行一次启动就增加一条这样的错误日志
二、解决过程:
1、针对现象4
查看配置文件找到pid文件配置位置,删除pid文件,还是没有解决;
调整了pid文件的位置,也还是没解决。
看来不是这个原因。
2、针对现象5
# cd /etc/httpd/conf.d/ #进入配置文件目录
[root@csit conf.d]$ grep NSSEngine * #查找配置选项,并且知道在 nss.conf 这个文件中
nss.conf:NSSEngine on
[root@csit conf.d]$ vi nss.conf #注释NSSEngine
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
#NSSEngine on
[root@csit httpd]# service httpd restart
Stopping httpd: [ 失败 ]
Starting httpd: [ 成功 ]
三、分析
nss模块有关
certutil -d /etc/httpd/alias -L -n Server-Cert可以查看nss中的certificate过期的时间,比如这个命令输出在某台机器上有如下的信息。(这个命令中的/etc/httpd/alias是nss.conf中这个值“NSSCertificateDatabase”的配置)
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 3 (0x3)
Signature Algorithm: PKCS #1 MD5 With RSA Encryption
Issuer: "CN=Certificate Shack,O=example.com,C=US"
Validity:
Not Before: Fri Dec 21 03:56:05 2007
Not After : Wed Dec 21 03:56:05 2011
所以,当前时间是已经过期了的。通过修改nss.conf来解决的,或者也可以直接删除mod_nss,不是用这个安全方面的module即可。)
The mod_nss module provides strong cryptography for the Apache HTTP Server via the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols, using the Network Security Services (NSS) security library.
Network Security Services (NSS) is a set of libraries designed to support cross-platform development of security-enabled client and server applications. Applications built with NSS can support SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other security standards.
进一步分析:原因,发现系统服务器的时间跟目前的时间不一致,北京时间是9点多,但是服务器时间是12点多了。导致过期。估计有两个办法可以解决:
1、停掉nss引擎,如上解决办法;
2、把服务器的时间同步好。nss证书重新生成
查看当前时间点的nss_error_log的报错信息
[Mon 06 04 09:18:42 2015] [error] Certificate not verified: 'Server-Cert'
[Mon06 04 09:18:42 2015] [error] SSL Library Error: -8181 Certificate has expired
[Mon 06 04 09:18:42 2015] [error] Unable to verify certificate 'Server-Cert'. Add "NSSEnforceValidCerts off" to nss.conf so the server can start until the problem can be resolved.
这里已经给出了解决方法:可加入NSSEnforceValidCerts off 禁止校验证书的参数来避免该问题,这也是一种方法,当然也可以重建校验证书!
重建证书解决办法:
rpm -qa mod_nss 查看命令,如果查看没有结果表示没有安装
[root@WEBsvr alias]# certutil -d /etc/httpd/alias -L -n Server-Cert 查看nss安装时间
生成新证书前,务必先删除旧证书数据库文件
# cd /etc/httpd/alias
# rm -f *.db
# /usr/sbin/gencert /etc/httpd/alias > /etc/httpd/alias/install.log 2>&1
# certutil -d /etc/httpd/alias -L -n Server-Cert
或者不验证证书过期时间的,那就在nss.conf 中加入NSSEnforceValidCerts off配置即可;
四、小结
httpd启动不起来,不要慌了神。
首先擦看错误日志,分析错误原因。
配置文件在修改前一定要先备份。
阅读(3586) | 评论(0) | 转发(0) |