如何防止没有证书的域访问 https://?

如何防止没有证书的域访问 https://?

我有这个设置

Server version: Apache/2.2.22 (Ubuntu)
OpenSSL 1.0.1c 10 May 2012

一个 IP 连接了多个域名。因为example1.com我有一个签名的 SSL 证书,因此example1.com可以通过https://secure.example1.com

这也适用于example2.com(使用有效证书签名并可通过 访问https://secure.example2.com

但是,example3.com它没有绑定任何 SSL 证书,因此无法通过https(SSL 端口 443)访问。但是,当用户转到时https://example3.com会显示警告。在 Chrome 中它看起来像这样

您尝试访问 example3.com,但实际上您访问的服务器却自称是 secure.example1.com。这可能是由于服务器配置错误或更严重的问题造成的。您网络上的攻击者可能试图让您访问虚假(且可能有害)的 example3.com 版本

如果你忽略警告,用户实际上将看到的内容secure.example1.com

VirtualHost 设置如下

<VirtualHost *:443>
        ServerName secure.example1.com
        DocumentRoot /var/www/blahblah
        SSLEngine on
        SSLCertificateFile /blahblah.crt
        SSLCertificateKeyFile /blahblah.key
        SSLCertificateChainFile /blahblah.pem
</VirtualHost>

<VirtualHost *:443>
        ServerName secure.example2.com
        DocumentRoot /var/www/blahblah
        SSLEngine on
        SSLCertificateFile /blahblah.crt
        SSLCertificateKeyFile /blahblah.key
        SSLCertificateChainFile /blahblah.pem
</VirtualHost>

<VirtualHost *:80>
        ServerName example3.com
        DocumentRoot /var/www/blahblah
</VirtualHost>

我怎样才能阻止这种行为?

答案1

非 SSL 域不应使用此 IP。即使对于多个支持 SSL 的域,您也需要依赖客户端毫无问题地实现 SNI,这可能是也可能不是一个安全的假设。

问题是,在 Apache 可以将浏览器重定向到 HTTP 之前,SSL 握手必须成功,因此如果您无法为域提供有效的证书,客户端将始终声称 SSL 错误。

编辑:如果您只使用一个具有适当 SAN(多域证书)的证书,则多个 SSL 域将正常工作。但是,非 SSL 域的问题仍然存在。

答案2

正如 Koen van der Rijt 已经写过的,你应该检查 SF 中是否有类似的问题并仔细阅读答案。

  apache2ctl -S 

给出 vhost“执行”的顺序

因此您的 example1.com 是第一个端口:443 定义的域,然后将使用这个。

相反,你可以制作一个 fe 自签名证书并通知用户此域现在没有 https 连接,或者执行 rewrite_rule 将流量重定向到https://domain3.comhttp://domain3.com。请注意,这将需要“无效”证书并会通知用户。

如果您不使用 SNI,则每个证书至少需要 1 个 IP。

相关内容