即使安装了新证书,Apache似乎仍在使用旧的过期证书


15

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 webmaster@donotemailme.com
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文件。我还使用“定位”来验证只有一个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://gentlemanjoe.com的HTTP Server响应标头显示“ Andromeda”而不是“ Apache”。这对我来说很奇怪,因为我对“ Andromeda”的谷歌搜索打开了一个媒体服务器类型的项目,该项目不会安装在该服务器上(但是我不能确定地说,因为我没有设置任何内容) ,通常的管理员/开发人员正在休假,而我只是在帮助他的网站的朋友。)而且,httpd.conf文件不包含字符串“ Andromeda”,表明尚未对其进行修改以将其吐出来。因此,这可能是他正在使用的Magento电子商务平台,但是替换标准Apache响应标头的意义何在?


这是什么错误:RSA服务器证书CommonName(CN)`www.gentlemanjoe.com'与服务器名称不匹配!?
mdpc

我不是很确定,我认为这是在抱怨www.gentlemanjoe.com与elimanmanjoe.com不匹配,但这不能解释为什么该网站仍使用过期的证书。如果仅是常见名称/服务器名称mistmatch错误,我是否不会在浏览器安全警告中看到这一点?新证书不应显示为已过期,但会出现名称不匹配的警告,对吗?
Jordan Rieger

Answers:


17

Apache前面有东西。检查该配置:

Listen 127.0.0.1:443
....
<VirtualHost 127.0.0.1:443>

它仅在localhost上侦听,因此Internet客户端不会直接使用此服务-它们可能会被代理。

为了确定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)-这是需要新证书的服务。


是! 谢谢Shane,这很合逻辑。男孩,这是一个艰难的过程。事实证明,该过程是一个名为nginx的代理服务器,它监听一个我什至不知道与该服务器相关联的IP地址,然后 HTTPS和HTTP请求中继到Apache。我不知道最后一个家伙为什么认为这是个好主意,这似乎毫无意义。Nginx要求我重新格式化GoDaddy提供的证书,以将服务器证书和授权链按一定顺序放在一个文件中。无论如何,现在就可以使用!谢谢!
约旦·里格

2
@JordanRieger很高兴听到!nginx通常被认为比Apache更轻,更快,因此,如果它在内部处理一些请求(例如,静态内容)并且仅将请求的特定子集传递给Apache,则可能会出现这种情况。但这听起来像是只是将所有内容发送到Apache,所以您是对的-只是性能浪费。
Shane Madden

在我们的案例中,它是AWS ELB。
阿克沙伊

0

此问题的常见来源是Apache的多个运行实例。配置更改由您(重新)启动的进程执行,但请求由运行旧配置的旧进程提供。

停止服务:

service apache2 stop

检查该站点是否仍可访问。如果是,则表明原因。

现在运行

ps aux | grep apache

它将为您提供正在运行的apache2进程及其PID的列表。杀死所有进程(注意,此命令还可能以名称/用户等身份返回与Apache无关的进程。例如Apache Tomcat,您可能不想杀死它们。)

kill <pid>

再次运行ps aux并确保进程不再运行。

再次检查网站是否可访问。不应该这样

现在开始apache服务

service apache2 start

验证是否正在提供新证书。

如果您不想终止进程,则可以重新启动系统。它将具有相同的效果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.