我已在网站上为我的域名设置了 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://服务器.域名.tld和http://service.domain.tld:8888位于同一 IP/服务器上
然后可以添加来自http://service.domain.tld和https://service.domain.tld到http://service.domain.tld:8888