为什么 Apache 返回错误的证书?

为什么 Apache 返回错误的证书?

我有foo.es两年前,我使用 SSL 通配符证书运行我的网站。现在我想在同一台服务器上为“**.foo.com*”安装另一个证书。我已将新的 foo_com.crt 和 foo_com.key 文件复制到新服务器,并添加了一个新条目ssl.conf

<VirtualHost foo.com:443>
ServerAdmin [email protected]
DocumentRoot /var/www/foo.com/
Servername foo.com
ServerAlias www.foo.com

ErrorLog /usr/local/apache/logs/error_log
TransferLog /usr/local/apache/logs/access_log

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/httpd/ssl.crt/foo_com.crt
SSLCertificateKeyFile /etc/httpd/ssl.key/foo_com.key
SSLCertificateChainFile /etc/httpd/ca/sub.class2.server.ca.pem
SSLCACertificateFile /etc/httpd/ca/ca.pem

SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /usr/local/apache/logs/ssl_request_log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

有了这个,我期望能够访问https://foo.com没有任何问题。相反,浏览器会发出警告ssl_error_bad_cert_domain错误代码。当我查看证书时,我发现证书通用名称是**.foo.es*,它是第一个证书(请注意,我仍然安装了此证书,我需要两者)。

Apache 错误日志仅显示以下内容:

[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate CommonName (CN) `*.foo.com' does NOT match server name!?
[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate CommonName (CN) `*.foo.com' does NOT match server name!?
[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate CommonName (CN) `*.foo.com' does NOT match server name!?
[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate wildcard CommonName (CN) `*.foo.com' does NOT match server name!?
[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate CommonName (CN) `*.foo.com' does NOT match server name!?
[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate CommonName (CN) `*.foo.com' does NOT match server name!?
[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate CommonName (CN) `*.foo.com' does NOT match server name!?
[Wed Jan 23 22:53:56 2013] [warn] RSA server certificate wildcard CommonName (CN) `*.foo.com' does NOT match server name!?

发生了什么事?为什么浏览器获取了 foo.es 证书,但 Apache 日志却报告 foo.com 证书有问题?

运行:Gentoo 发行版上的 Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8g

答案1

Apache 直到 2.2.12 版本才支持 SNI在此之前,Apache 只是提供第一个证书。解密请求后,它仍然会匹配正确的 vhost。

如果你只有一个 IP 地址,那么你必须升级 Apache。(即使你有多个 IP 地址,Apache 自 2.0.59 以来已经取得了长足的进步。你真的应该升级,除非你需要旧版本。

某些浏览器和操作系统也不支持 SNI。如果您的网站有访问者使用不支持 SNI 的浏览器,您将不得不考虑获取第二个 IP 地址。

相关内容