主端口 80 上的 hsts,不在其他端口上

主端口 80 上的 hsts,不在其他端口上

我已在网站上为我的域名设置了 hstshttp://server.mydom.tld:80,因此浏览器进入端口https://server.mydom.tld在端口 443 上

但是,我还有其他网络服务器,运行在其他端口上。因此,当我访问http://server.mydom.tld:8888它被转发到https://server.mydom.tld:8888,但该服务器未运行 https,因此请求失败。

这符合规格吗?

我注意到我没有运行 hstshttp://mydom.tld或者http://www.mydom.tld,这可能是一个错误。

该怎么办?

答案1

是的,这是故意的。RFC 6797状态:

     The UA MUST replace the URI scheme with "https" [RFC2818], and

     if the URI contains an explicit port component of "80", then
     the UA MUST convert the port component to be "443", or>>

     if the URI contains an explicit port component that is not
     equal to "80", the port component value MUST be preserved;
     otherwise,

     if the URI does not contain an explicit port component, the UA
     MUST NOT add one.

     NOTE:  These steps ensure that the HSTS Policy applies to HTTP
            over any TCP port of an HSTS Host.

您应该在不同的域上运行普通 HTTP 服务,或者更好的是,使用 HTTP+TLS 服务器作为内部普通 HTTP 服务的反向代理。

答案2

当使用 HTTP 访问您的网站时,浏览器会忽略 Strict-Transport-Security 标头;这是因为攻击者可能会拦截 HTTP 连接并注入标头或将其删除。当通过 HTTPS 访问您的网站且没有证书错误时,浏览器会知道您的网站支持 HTTPS,并会遵守 Strict-Transport-Security 标头。

答案3

如果确实不想在其他服务上运行 https,可以在 DNS 中添加别名,因此https://服务器.域名.tldhttp://service.domain.tld:8888位于同一 IP/服务器上

然后可以添加来自http://service.domain.tldhttps://service.domain.tldhttp://service.domain.tld:8888

相关内容