Apache 2.2.3 / mod_ssl / CentOS 5.5 VPS
我们的证书在2011年10月6日到期,即使我们已经正确安装了新的证书 , 浏览到该网站仍然显示过期的证书! 我试过删除我的浏览器caching,并使用几个不同的浏览器。 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忠心地抱怨并拒绝启动。
然后我试图确定我没有被编辑错误的configuration文件所迷惑。 使用“locate”,我只在/etc/httpd/conf/httpd.conf下find了一个httpd.conf文件。 我也用“locate”来validation只有一个ssl.conf文件,/etc/httpd/conf.d/ssl.conf。 关键文件是我使用OpenSSL生成的,遵循GoDaddy为生成CSR所做的指示。
我已经通过上传一个test.html文件到/var/www/gentlemanjoe.com文件夹并validation我可以浏览到它来validation我正在使用正确的站点。 但是,如果我尝试在HTTPS中查看testing文件,则会收到相同的证书到期警告。
我证实了证书本身有权利到期date:
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重新authenticationGoDaddy的证书,似乎一切正常,但我在浏览器中得到了相同的结果。
可能的线索#1
每当我做“apachectl重启”,我在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和non-www应该无关紧要,我倾向于同意,因为我的浏览器中的安全警告并不是抱怨服务器名称不匹配,而是过期 ,表示旧的证书仍然存在以某种方式加载。
可能的线索#2
http://gentlemanjoe.com的HTTP服务器响应标题是“Andromeda”,而不是“Apache”。 这对我来说似乎很奇怪,因为我的“仙女座”谷歌search变成一个媒体服务器types的项目,这将不会安装在这台服务器上(但我不能肯定地说,因为我没有设置任何这一点,通常的pipe理员/开发人员正在度假,我只是帮助他的网站的朋友。)另外,httpd.conf文件不包含string“仙女座”,表明它没有被修改吐出来。 所以它可能是他正在使用的Magento电子商务平台,但是replace标准Apache响应头的意义何在呢?
有些东西在Apache的前面。 看看这个configuration:
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头,所以,让我们find过程: lsof -i 。
Apache将有127.0.0.1:443 ,而其他一些服务有0.0.0.0:443 (或VPS的公共地址:443 ) – 这是需要新的证书。
这个问题的一个常见原因是Apache的多个运行实例。 configuration更改由您(重新)启动的进程拾取,但请求由旧configuration运行的旧进程提供。
停止服务:
service apache2 stop
检查网站是否仍然可以访问。 如果是,那么你已经确定了原因。
现在运行
ps aux | grep apache
它会给你运行apache2进程及其PID的列表。 全部杀死它们(注意,这个命令也可能会返回Apache的名字/用户等不相关的进程,比如Apache Tomcat,你可能不想杀死它们)。
kill <pid>
再次运行ps aux,并确保进程不再运行。
再次检查网站是否可访问。 它不应该。
现在开始Apache服务
service apache2 start
validation是否正在提供新的证书。
如果你不想杀死进程,你可以重启系统。 它会有同样的效果。