wei*_*glt 5 apache ssl virtualhost mod-ssl tls1.2
我有两个域 example1.com 和 example2.com,在同一 IP 12.345.678.90 上运行。
现在我想完全禁用通过 12.345.678.90 的 https 访问。
我尝试这样做(紧凑的代码,没有花哨的东西)
<VirtualHost *:443>
SSLEngine off
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
ServerName example1.com
DocumentRoot /var/www/html/example1
SSLCertificateFile /etc/.../fullchain.pem
SSLCertificateKeyFile /etc/.../privkey.pem
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
ServerName example2.com
DocumentRoot /var/www/html/example2
SSLCertificateFile /etc/.../fullchain.pem
SSLCertificateKeyFile /etc/.../privkey.pem
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
现在,当我禁用默认情况下捕获所有内容的第一个块时,两个示例站点都可以工作。但是,如果我启用它,就没有任何作用了。实际上,这只是为 443 复制的端口 80 解决方案。这似乎是 SSL 特定问题(编码的请求数据)。
如何阻止 https 上的“IP 访问”?或者,配置我的设置的常用方法是什么?
背景是:创建基于 IP 的 SSL 证书甚至没有标准化,因此允许这种请求是没有意义的。
创建基于 IP 的 SSL 证书甚至没有标准化,
这不是真的。该标准明确定义特定 IP 地址的证书应在主题备用名称部分中使用 iPAddress 类型。但公共 CA 将不再为 IP 地址颁发证书,而只为主机名颁发证书。
除此之外,您的服务器要么接受特定 IP 地址上的 SSL 端口上的连接,要么不接受。这是因为在 TCP 级别只能看到 IP 地址,并且不知道主机名。如果客户端使用所有现代浏览器都使用的 SNI TLS 扩展,则主机名仅在 TLS 握手中获知。
因此,如果客户端在 SNI 扩展中使用未知主机名或根本不使用 SNI 扩展(即使用https://ip-address/
. 这可以通过使用 SSLStrictSNIVHostCheck 指令来完成,如下所示:
如果在默认的基于名称的虚拟主机中设置为打开,则 SNI 不知道的客户端将不允许访问属于此特定 IP/端口组合的任何虚拟主机。
设置此选项后,访问http://ip-address/
将导致向客户端发出 TLS 警报,并且 TLS 握手将失败。
归档时间: |
|
查看次数: |
10288 次 |
最近记录: |