启用 HSTS 后是否可以从 non-secure 重定向到安全连接?

Is it possible to redirect from a non-secure to secure connection after enabling HSTS?

我最近开始在我的一个网站上提供 'strict-transport-security' header 服务。我没有预料到的一个问题是我的 SSL 证书只涵盖 mydomain.com,因此如果用户访问 www.mydomain.com,而不是被重定向(就像以前发生的那样),他们会看到安全错误由于新的 header 不允许所有 non-https 通信,因此由他们的浏览器呈现。

出于各种原因,我使用的是 multi-domain 证书,因此不能简单地购买添加了 'www' 的新证书。

我明白为什么这是预期的行为,但是我想知道是否有办法让我将 www 重定向到 non-www,尽管 www 在 www 域上没有有效证书?

如果有什么不同,我的服务器是 运行 Ubuntu。

如评论中所述,如果您的 HSTS header 中有 includeSubDomains,那么这会给您带来问题,因为具有此 header 的浏览器将尝试访问 https://my.yourdomain.com(即超过HTTPS),这将给出证书错误。

老实说,最好的做法是同时包含 mydomain.com 和 www.domain.com(如果有任何证书),并且大多数 CA 会以相同的价格包含这两个域。这不适用于多域或通配符证书,但仍然是最佳实践,因此应尽可能做到。

您当然可以按照评论中的建议删除 HSTS header 的 includeSubDomains 部分,这将解决问题(一旦 maxage 时间给出的任何缓存响应 - 看起来是一个你的例子中的年份)但是这里还有其他风险。例如,有人可以设置 wwww.mydomain.com(有 4 个 w's)或 secure.mydomain.com 或任何其他看起来合法的子域,并通过 http 而不是 https 提供服务,访问者可能不会注意到。此外,子域可以访问或能够设置它们属于使用路径属性的域的 cookie。这些是边缘情况,即使没有 includeSubDomains 也有 HSTS 仍然提供大量保护,所以即使没有 includeSubDomains 也最好包含它,但如果要努力打开 HSTS,那么最好能够完全打开它。

无论如何,不​​管风险是什么,仍然建议两者 1) 通过 HTTPS 为 www 子域提供服务,因为一些人或软件会尝试这个域并避免任何问题 - 无论是是否使用 HSTS,以及 2) 使用 HSTS,最好尽可能使用 includeSubDomains。