我在 上安装了 Jenkins ci.example.com
,在 上有一个静态站点example.com
。Jenkins 安装配置为仅使用 HTTPS。我是个小气鬼,所以我只有域证书ci.example.com
。我的 Apache 配置如下所示:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
ErrorDocument 404 /404.html
</VirtualHost>
<VirtualHost *:80>
ServerName ci.example.com
Redirect permanent / https://ci.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName https://ci.example.com
ServerAlias ci
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/ci.example.com.key
SSLCertificateFile /etc/apache2/ssl/ci.example.com.crt
SSLCertificateChainFile /etc/apache2/ssl/ci.example.com.ca-bundle
# Some proxy magic to make Jenkins work
</VirtualHost>
(实际上,这是一台 Ubuntu 机器,所以我只是提取了相关的站点配置文件并将它们连接起来;其他文件中还有很多其他几乎不相关的配置内容)
当我导航到 时https://example.com
,出现证书错误,因为 Apache 选择了端口 443 上唯一可用的虚拟主机。是否可以向用户显示一个不那么可怕的连接被拒绝错误?
这个答案说我不能在没有证书的情况下从 HTTPS 重定向到 HTTP,这是有道理的,因为您需要先建立 SSL 连接(带有证书),然后才能发送 3xx。但我不想发送 3xx(或者 4xx)。我只想完全拒绝连接。有什么办法吗?
答案1
使用您当前的设置:
不,您不能直接拒绝连接,
也就是说,不能同时拒绝与 ci.example.com vHost 的连接。
咬紧牙关,为附加主机名获取证书,或获取通配符证书,或使用 cloudlfare 等,或者当人们尝试对您没有证书的虚拟主机使用 HTTPS 时接受浏览器警告。
或者:
在与 example.com 不同的 IP 地址上托管 ci.example.com。
在用于 example.com 的 IP 上,不要监听 443。
这将导致您寻求的连接被拒绝。
(但这可能与你所说的吝啬鬼身份不一致)