如何正确拒绝与没有证书的子域名的 SSL 连接

如何正确拒绝与没有证书的子域名的 SSL 连接

我目前正在首次使用 nginx 设置 (半正式) 服务器。我有几个域和子域,并且希望尽可能多地使用 SSL 来确保往返于我网站的流量安全。我最近遇到的一个问题是,如果不使用通配符证书,我发现自己无法正确处理对不存在的子域的 SSL 请求。

基本上我的设置非常接近一(nginx,重定向到 https,多个子域,为所有有效子域加密证书,为无效域捕获所有证书)。

用户如果输入错误的子域名,就会收到类似“此连接不可信任”(或更糟,取决于浏览器)的错误信息,这真的很不礼貌。这可能会破坏对我网站的信任。例如,这个https://www.my-domain.com方法有效,但https://ww.my-domain.com会告诉用户我的网站不可信任。由于我预计我的读者中会有相当一部分人并不精通技术,所以我不能指望他们自己理解或诊断这一点。

因此,我想要的基本上就是在有人访问不存在的子域时中止连接,这样他们就会收到“连接被拒绝”错误,而不是“此网站很邪恶,您可能正在遭受黑客攻击”错误。这不仅更接近事实(该网站值得信赖,但那里什么都没有),还可能帮助他们发现错误,因为它指出的是地址错误而不是证书错误。

事实上,这就是我对非 SSL 连接所做的。我在 nginx 中有一个 catchall 服务器指令,它对任何进入端口 80 且与已知子域不匹配的内容都返回 404。那么我该如何真正拒绝 nginx 中的 SSL 连接呢?

我知道我不能使用 HTTP 返回代码,因为在这种情况下,首先就没有连接。这就是 SSL 的全部意义所在。我不能使用通配符证书,因为它们太贵了。我想避免接触 iptables,因为当我更改子域时,维护起来很麻烦。但是,如果这是最好的解决方案,我可能会研究它。是否有任何巧妙的 DNS 条目可以提供帮助?

答案1

我会禁用无效域名的捕获功能。这样,尝试https://ww.my-domain.com在网络浏览器中访问时,结果就不会那么可怕了“找不到服务器”用户可能更熟悉的错误。对于 Firefox,它有助于建议用户,

检查地址是否有输入错误,例如将 www.example.com 误认为 ww.example.com

这似乎是不获取通配符证书以对应捕获所有 DNS 解析所配置的所有可能性的最佳替代方案。

相关内容