Apache 2.2.3/mod_ssl/CentOS 5.5 VPS
我们的证书于 2011-10-06 到期,尽管我们似乎已经正确安装了新证书,浏览该网站仍然显示证书已过期!我尝试删除浏览器缓存并使用了几种不同的浏览器。ssl.conf 文件中的相关行(我已排除注释掉的行):
Listen 127.0.0.1:443
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
# Note - I tried disabling SSLSessionCache with the "none" setting but it didn't help.
<VirtualHost 127.0.0.1:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.crt
SSLCertificateKeyFile /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.key
SSLCertificateChainFile /var/certs/gentlemanjoe.com/new2011/gd_bundle.crt
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ServerAdmin [email protected]
DocumentRoot /var/www/gentlemanjoe.com
ServerName gentlemanjoe.com
<Directory /var/www/gentlemanjoe.com>
AllowOverride All
Order deny,allow
allow from all
</Directory>
</VirtualHost>
我检查过的东西
首先,我尝试将旧的证书和密钥文件移动到一个完全不同的文件夹,以确保 Apache 不会以某种方式抓取它们。什么都没有改变。为了好玩,我尝试暂时重命名新的证书和密钥文件,Apache 尽职尽责地抱怨并拒绝启动。
然后我尝试确保我没有被编辑错误的配置文件所欺骗。使用“locate”,我在 /etc/httpd/conf/httpd.conf 下只找到了一个 httpd.conf 文件。我还使用“locate”验证了只有一个 ssl.conf 文件,即 /etc/httpd/conf.d/ssl.conf。密钥文件是我使用 OpenSSL 生成的,遵循了 GoDaddy 提供的生成 CSR 的说明。
我已经通过将 test.html 文件上传到 /var/www/gentlemanjoe.com 文件夹并验证我可以浏览它来验证我正在使用的是正确的网站。但如果我尝试在 HTTPS 中查看测试文件,我会收到相同的证书过期警告。
我已验证证书本身具有正确的到期日期:
openssl x509 -in /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
07:e7:49:69:97:96:16
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
Validity
Not Before: Oct 21 17:37:55 2011 GMT
Not After : Oct 8 21:16:03 2013 GMT
Subject: C=CA, ST=BC, L=Burnaby, O=Diamond Bailey Consolidated Commercial Services Ltd, OU= , CN=www.gentlemanjoe.com
我尝试使用新的 CSR 在 GoDaddy 上重新输入证书,一切似乎都正常,但我在浏览器中得到了相同的结果。
可能的线索 #1
每当我执行“apachectl restart”时,我都会在 error_log 文件中看到以下内容:
[Fri Oct 21 18:03:33 2011] [notice] SIGHUP received. Attempting to restart
[Fri Oct 21 18:03:33 2011] [notice] Digest: generating secret for digest authentication ...
[Fri Oct 21 18:03:33 2011] [notice] Digest: done
[Fri Oct 21 18:03:33 2011] [info] APR LDAP: Built with OpenLDAP LDAP SDK
[Fri Oct 21 18:03:33 2011] [info] LDAP: SSL support available
[Fri Oct 21 18:03:33 2011] [info] Init: Seeding PRNG with 256 bytes of entropy
[Fri Oct 21 18:03:33 2011] [info] Init: Generating temporary RSA private keys (512/1024 bits)
[Fri Oct 21 18:03:33 2011] [info] Init: Generating temporary DH parameters (512/1024 bits)
[Fri Oct 21 18:03:33 2011] [info] Shared memory session cache initialised
[Fri Oct 21 18:03:33 2011] [info] Init: Initializing (virtual) servers for SSL
[Fri Oct 21 18:03:33 2011] [warn] RSA server certificate CommonName (CN) `www.gentlemanjoe.com' does NOT match server name!?
[Fri Oct 21 18:03:33 2011] [info] Server: Apache/2.2.3, Interface: mod_ssl/2.2.3, Library: OpenSSL/0.9.8e-fips-rhel5
[Fri Oct 21 18:03:34 2011] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Fri Oct 21 18:03:34 2011] [info] Server built: Aug 30 2010 12:28:40
GoDaddy 的技术人员告诉我,www 和非 www 并不重要,我也同意这一点,因为我的浏览器中的安全警告是不是抱怨服务器名称不匹配,而是到期,表明旧证书仍以某种方式被加载。
可能的线索 #2
HTTP 服务器响应标头http://gentlemanjoe.com显示的是“Andromeda”而不是“Apache”。这对我来说似乎很奇怪,因为我在 Google 上搜索“Andromeda”会得到一个媒体服务器类型的项目,而这个项目不会安装在这台服务器上(但我不能肯定地说,因为我没有设置任何这些,通常的管理员/开发人员正在度假,我只是在帮助朋友处理他的网站。)此外,httpd.conf 文件不包含字符串“Andromeda”,表明它没有被修改以输出这个字符串。所以这可能是他正在使用的 Magento 电子商务平台,但替换标准 Apache 响应标头有什么意义呢?
答案1
Apache 前面有东西。查看该配置:
Listen 127.0.0.1:443
....
<VirtualHost 127.0.0.1:443>
它仅在本地主机上监听,因此互联网客户端不会直接访问此服务 - 它们可能会被代理。
为了检查 Apache 是否加载了正确的证书,请直接在 Apache 的侦听器上点击该服务:openssl s_client -connect 127.0.0.1:443 -showcerts
不确定 Andromeda 标题,因此,让我们找到该过程:lsof -i
。
Apache 将具有127.0.0.1:443
,而其他一些服务具有0.0.0.0:443
(或 VPS 的公共地址:443
) - 这是需要新证书的服务。
答案2
此问题的一个常见根源是多个正在运行的 Apache 实例。配置更改由您(重新)启动的进程获取,但请求由使用旧配置运行的旧进程处理。
停止服务:
service apache2 stop
检查网站是否仍可访问。如果可以,则您已找到原因。
现在运行
ps aux | grep apache
它将为您提供正在运行的 apache2 进程及其 PID 的列表。将它们全部杀死(请注意,此命令还可能返回名称/用户等中包含 Apache 的无关进程,例如 Apache Tomcat,您可能不想杀死它们。)
kill <pid>
再次运行 ps aux 并确保进程不再运行。
再次检查网站是否可以访问。应该不能。
现在启动 apache 服务
service apache2 start
验证新证书是否正在提供。
如果你不想终止进程,你可以重启系统。效果是一样的。
答案3
谢谢!这个帖子也为我指明了解决问题的正确途径。Apache 似乎使用了正确的证书,但我的 haproxy 服务自 letsencrypt 证书续订以来就没有重新启动过,并且仍然显示旧证书。重新启动我的 haproxy 服务解决了我的问题。