如何正确拒绝ssl连接到没有证书的子域

我目前第一次用nginx设置了一个(半认真的)服务器。 我有几个域名和子域名,并希望尽可能使用SSL,以保持来自我的网站的stream量合理安全。 最近遇到的一个问题是,我发现自己无法正确处理SSL请求到不存在通配符证书的不存在的子域。

基本上,我的设置非常接近这个 (nginx,redirect到https,多个子域名,让我们encryption所有有效的子域名的证书,全无形的域名)。

这是真正的NotNice™,错误input一个子域名的用户将会遇到“这个连接不可信任”的错误(或者更糟,取决于浏览器)。 这可能会破坏我的网站的信任。 例如https://www.my-domain.com作品,但https://ww.my-domain.com会告诉用户我的网站不被信任。 由于我期望有相当数量的读者不是精通技术,所以我不能指望他们自己理解或诊断。

所以我想要的是,当有人访问一个不存在的子域名时,基本上只是中止连接,这样他们会得到一个“连接被拒绝”的错误,而不是“这个网站是邪恶的,你可能会被黑客攻击”的错误。 这不仅更接近事实(这个网站是可以信任的,那里什么也没有),也可能帮助他们发现错误,因为它指出地址是错的,而不是证书。

事实上,这就是我为非SSL连接所做的。 我在nginx中有一个catchall服务器伪指令,它只返回404端口80上的任何内容,并且与已知的子域不匹配。 那么我怎么才能在nginx中拒绝ssl连接呢?

我知道我不能使用HTTP返回码,因为在这种情况下,首先没有连接。 这是ssl的重点。 我不能使用通配符证书,因为它们太昂贵了。 我想避免接触iptables,因为当我更改子域名时,这很难保持。 但是,如果这是最好的解决scheme,我可以研究它。 有没有聪明的DNS条目可以帮助?

我会禁用所有无效的域名。 这样一来,试图在网页浏览器中访问https://ww.my-domain.com会导致用户更熟悉的“服务器未find”错误。 在Firefox的情况下,它有助于build议用户,

检查input错误的地址,如ww.example.com而不是www.example.com

这似乎是不能获得通配符证书以对应于全面的DNSparsing所configuration的所有可能性的最佳select。