子域名上仅限 HTTPS

子域名上仅限 HTTPS

我在 上安装了 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。
这将导致您寻求的连接被拒绝。

(但这可能与你所说的吝啬鬼身份不一致)

答案2

你不便宜,你懒惰的. 去买一个自由的证书,希望您的客户支持SNI

相关内容