我有一个 Apache 服务在 Ubuntu 服务器上运行,有两个完全不同的网站,即不同的域。
它们每个都有一个单独的 VirtualHost 配置,并且直到最近,只有其中一个通过 HTTPS 提供服务。
今天早上,当我为第二个站点引入新的 SSL 证书并相应地更改 VirtualHost 配置(改为侦听端口 443,将其指向证书文件等)时,它没有按预期为第二个站点提供服务,而是为原始 HTTPS 提供服务网站代替。
如果有人能帮助我,我将不胜感激。
这是(经过清理的)VirtualHost 文件:
第一个站点 - 始终占据主导地位的站点
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName www.first-site.com
ServerAlias some similar names
DocumentRoot /var/www/first-site.com/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL config
SSLEngine on
SSLProtocol -All +TLSv1.2
SSLCertificateFile /etc/apache2/ssl/first-site/firstsite-certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/first-site/firstsite.key
SSLCertificateChainFile /etc/apache2/ssl/first-site/firstsitechain.crt
.....More site-specific rules.....
第二个站点 - 不断被覆盖的站点
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName second-site.com
ServerAlias some similar names
DocumentRoot /var/www/secondsite/htdocs
ErrorLog /var/log/apache2/secondsite-error.log
CustomLog /var/log/apache2/secondsite-access.log combined
SSLEngine on
SSLProtocol -All +TLSv1.2
SSLCertificateFile /etc/apache2/ssl/secondsite/secondsite.crt
SSLCertificateKeyFile /etc/apache2/ssl/secondsite/secondsite.key
SSLCertificateChainFile /etc/apache2/ssl/secondsite/secondsitechain.crt
.....More site-specific rules.....
我查看了日志,但没有弹出。也许这只是我的 grep-fu...
有人经历过类似的事情吗?需要更多信息吗?
答案1
关键词:神经网络研究所(服务器名称指示)
看起来您的服务器或客户端缺少 SNI 支持,请参阅
https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
要测试您的服务器是否返回 SNI 标头信息,您可以尝试
openssl s_client -servername www.SERVERNAME.com -tlsextdebug -connect www.YOURSERVER.com:443 2>/dev/null | grep "server name"
看https://serverfault.com/questions/506177/how-can-i-detect-if-a-server-is-using-sni-for-https
您也可以尝试这样的 SSL 服务器测试https://www.ssllabs.com/ssltest/ “握手模拟”应该为老客户提供如下内容:
Android 2.3.7 No SNI 证书不正确,因为该客户端不支持 SNI
但为新客户匹配证书。
顺便说一句,这里有人遇到了类似的问题 https://serverfault.com/questions/510132/apache-sni-namevhosts-always-route-to-first-virtualhost-entry