近段时间发现自己自签发的 SSL 证书显示为 linode 签发的一个已过期的自签发证书。百思不解,还咨询了 Linode VPS 的支持人员。最后发现是在某次升级系统之后,mod_ssl 的一个默认配置没有正确修改导致了这个问题。
为了能在登录和访问网站 WordPress 管理后台的时候使用 HTTPS 加密连接,以保证登录过程和后台数据得到加密保护,我在自己的 Linode VPS 上使用自签发的 SSL 证书来给 HTTPS 连接提供签名。我将自签发的证书添加为受信任的根证书颁发机构中,可以在访问的时候不再收到证书不安全的提示。本来一直用得好好的,但是在5月中旬的时候突然发现:
- 访问 cnzhx.net 主域名的时候,浏览器提示证书是 linode 签发给 linode 的,并且 6 月份过期(我的证书是 cnzhx.net 签发给 cnzhx.net 的)。
- 同时还发现访问子域名 test.cnzhx.net 的时候却一切正常。
于是开始找原因,尝试解决。但是断断续续弄了个把月才发现,原来那时候升级系统的时候,mod_ssl 自带的默认 /etc/httpd/conf.d/ssl.conf
配置文件发生了变化导致的(我用的是 CentOS + LAMP)。
在这个默认的 /etc/httpd/conf.d/ssl.conf
配置文件中出现了下面的内容:
<VirtualHost _default_:443> ...... SSLCertificateFile /etc/pki/tls/certs/localhost.crt ...... SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ...... </VirtualHost>
这里指定的证书与我自签发的证书不同。加密访问服务器 cnzhx.net 域名的时候,第一个出现的配置被使用,根本轮不到使用我自己签发的证书 cnzhx.net.crt,于是导致前述问题。
解决方法是要么注释掉或删除上面文件中的这两行,要么将其后面的 crt 和 key 文件改成主域名使用的证书文件。
这是个非常低级的错误,居然让我给经历了一次,还盘查了将近一个月,愣是没想到问题可能出现在 ssl.conf 文件上 —— 因为之前一直好好的。©
本文发表于水景一页。永久链接:<http://cnzhx.net/blog/a-mistake-about-ssl-config/>。转载请保留此信息及相应链接。