未使用 HSTS 将 HTTP 转换为 HTTPS

信息安全 tls http 火狐 hsts
2021-08-25 18:46:03

我正在查找 HSTS 在 HTTP 和 HTTPS 网站上的行为,以及它们的 HTTP 和 HTTPS 嵌入式资源。我的理解是,如果服务器在 HTTPS 响应中传递了 HSTS 响应标头,或者如果站点的名称出现在 HSTS 预加载列表中,那么该请求的所有资源都将通过 HTTPS 发送。

但是,在通过 Firefox Web Inspector 检查某些站点时,我注意到了一些差异。例如,在cnn.com(一个 HTTP 网站)上,一些doubleclick.net子域的请求通过 HTTP,即使它存在于这里的 HSTS 预加载列表中(使用 include_subdomains:true)。

在此处输入图像描述

只是为了测试根域是否发送了 HSTS 标头,我导航到ad.doubleclick.net位置地址栏中的链接,该链接将我定向到 Double Click 的主站点https://www.doubleclickbygoogle.com。在这里,正在发送 HSTS 标头:

在此处输入图像描述

然而,当我重新加载时,对doubleclick的请求没有影响:cnn.com

在此处输入图像描述

另一个有趣的事情是,当我尝试通过转到 Inspector 选项卡来在 DOM 上找到请求的源标记时,没有这样的标记http://ad.doubleclick.net(带有一些查询字符串)。检查器中的“原因”和“类型”标题似乎表明它的某种跟踪器类型的像素。

有谁知道这里会发生什么?

2个回答

从您提到的源代码中引用:

354  // Other Google-related domains that must use an acceptable certificate
355  // iff using SSL.
     ...
361  { "name": "doubleclick.net", "include_subdomains": true, "pins": "google" },

这意味着如果站点是通过 https 提供的,则证书是固定这并不意味着该站点需要通过 https 提供服务。force-https这对于设置了属性的其他域是不同的:

264  { "name": "accounts.google.com", "include_subdomains": true, "mode": "force-https", "pins": "google" },

编辑:基于 Chromium 的源代码(函数TransportSecurityState::GetStaticDomainStatein net/http/transport_security_state.cc),我将尝试解释可以看到的信息chrome://net-internals/#hsts以及它与net/http/transport_security_state_static.json使用示例的静态信息的关系doubleclick.net

static_sts_domain: doubleclick.net
static_upgrade_mode: OPPORTUNISTIC

OPPORTUNISTIC 是默认模式 ( STSState::MODE_DEFAULT)。这意味着它不会强制使用 HTTPS。使用默认模式,因为在配置中没有force-https给出明确的设置。

static_sts_include_subdomains: true

由于它不强制使用 https,因此此设置无关紧要。但该值可能是由上include_subdomains图所示的配置引起的,即使该配置行不包含force-https.

static_sts_observed: 1476162000

这是静态 HSTS/HPKP 列表的构建时间,在本例中为 2016/09/04。

static_pkp_domain: doubleclick.net
static_pkp_include_subdomains: true
static_pkp_observed: 1476162000
static_spki_hashes: sha256/IPMbDAjLVSGntGO3WP53X/zilCVndez5YJ2+vJvhJsA=,sha256/7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=,sha256/h6801m+z8v3zbgkRHpq6L29Esgfzhj89C1SyUCOQmqU=

这些是关于固定的信息。这些与上面显示的设置有直接关系(即include_subdomains应该使用哪些引脚)。

HSTS 仅适用于已设置的域。

您正在寻找的是 upgrade-insecure-requests CSP 指令。

内容安全策略:升级不安全请求

在 HSTS 预加载列表中,没有为 HSTS 列出用于密钥固定的 doubleclick.net。

有关https://scotthelme.co.uk/migrating-from-http-to-https-ease-the-pain-with-csp-and-hsts/的更多详细信息