首先输入 http:// 并在重定向后登陆 https:// 的浏览器已经以明文形式发送了一个请求,VPN 不会改变这一点。隧道保护从客户端到出口节点的线路;它不会加密传输层之上的任何内容,因此出口和源之间的观察者仍然可以看到明文跃点。将 HTTPS 设为第一个请求是客户端的更改,由三部分组成:真实的 HTTPS 地址、浏览器的升级方式以及站点自身的策略。以下步骤是我使用的顺序,每个步骤都会进行检查,告诉您是否已完成。

第 1 步:确认第一个请求实际上是什么

在更改任何内容之前,请查看浏览器发送的内容。打开网络面板,页面从冷缓存重新加载并读取第一行:如果方案是 http 并且状态是 301 或 308,则该行之后的所有内容都是第二个请求。 curl -sS -o /dev/null -w '%{http_code} %{url_effective}\n' http://example.com 在浏览器外重现相同的序列并打印您最终到达的 URL。

可能有两种结果,并且需要不同的解决方案。如果站点在同一主机上提供 HTTPS,修复方法是停止发布 HTTP 表单:更新书签、wiki 链接、桌面快捷方式和人们点击的电子邮件模板。如果该站点根本不提供 HTTPS 服务,则任何浏览器设置都不会创建它,诚实的答案是目标是问题所在。不要用异常来掩盖第二种情况,因为帐户页面上的证书异常会将传输问题转换为凭据问题。在触摸设置之前记下您所处的情况。

第 2 步:开启浏览器的仅 HTTPS 模式

升级模式是第二部分,模式之间不可互换。在启用之前检查您的功能:静默升级、带警告升级或拒绝加载。

在 Firefox 中,控件位于 about:config 后面和隐私设置页面中,以 dom.security.https_only_mode 作为开关,并通过挂锁菜单管理每个站点的例外情况。在 Chrome 和 Edge 中,同样的想法位于“设置”、“隐私和安全”、“安全”下,标记为“始终使用安全连接”。无论标签是什么,请验证仅在端口 80 上应答的主机的行为,因为升级然后静默回退的模式并不是您认为启用的保护。 Firefox HTTPS-Only 文档详细说明了该浏览器的升级、警告和异常行为。

第 3 步:修复资源,而不仅仅是地址栏

当升级失败时,请阅读确切的错误而不是地址栏。没有 HTTPS 侦听器的主机、与证书不匹配的主机名以及过期的链会产生不同的消息并属于不同的所有者。只有第一个是服务器端的差距;第二个通常是从未更新过的书签;三是与VPN连接无关的续费问题。

不要将证书例外添加到帐户站点,因为 VPN 已打开。该异常会禁用本来可以准确捕获 VPN 旨在防止的拦截的检查。

第三部分在页面内,这是人们怀念的部分。通过 HTTPS 加载的页面仍然可以从 http URL 中提取图像、字体或脚本,浏览器将阻止它们或降低整个页面的安全指标。检查网络面板中失败的请求并修复其所有者的资源引用,而不是假设地址栏描述了每个请求。在您运行的站点上,这意味着更正 CMS 或模板中存储的 URL,而不是在浏览器中重写它们。如果无法更改源,请将混合内容记录为已知间隙,因为拉取明文资源的页面上的挂锁是错误信号。

第 4 步:HSTS 添加了哪些内容,没有添加哪些内容

HSTS 是一种站点策略,而不是浏览器首选项,并且它是唯一可以在新配置文件上键入 http:// 的机制。一旦浏览器看到主机的 Strict-Transport-Security 标头,它就会在发送请求之前将后续请求重写为 https,这正是您想要的属性。它对于浏览器从未访问过的主机没有任何作用,对于服务同一应用程序的不同主机名也没有任何作用。

检查源端发送的内容为curl -sSI https://example.com | grep -i strict-transport-security。缺少标头是服务器更改,而不是客户端可以安装的内容。如果存在,请读取 max-age 以及是否设置了 includeSubDomains,因为访问之间的最大期限很短,并且缺少 includeSubDomains 会使每个子域不受保护。 RFC 6797 定义了用户代理如何应用策略以及它可能忽略的内容。预加载是一项单独的承诺,因此在向任何人承诺某个域位于列表中之前,请通过 hstspreload.org API 检查状态。

验证和回滚

回滚对于客户端设置来说很便宜,对于 HSTS 来说很昂贵。关闭仅 HTTPS 模式会立即恢复之前的行为;较长的 max-age 则不会,已经收到它的访问者会继续升级,直到它过期。

因此,在完成之前请按顺序进行验证。从冷缓存重新加载,并确认网络面板中的第一个请求是 https,没有前面的重定向。然后检查子域,因为 includeSubDomains 是这些策略通常比假设的范围更窄的地方。然后检查一个提取第三方资产的页面,因为混合内容是在所有其他修复中幸存下来的失败。

如果在所有这些之后第一个请求仍然是 http,则客户端不再是变量:人们点击的链接才是。在您控制的位置中搜索 http 形式的主机名,更新它们,然后使用相同的冷缓存重新加载进行重新测试。始终将 VPN 问题分开,因为隧道会更改谁可以查看请求,并且永远不会更改请求是否加密。票证中的一行是第一个请求才是重要的,重定向只是已发送请求的收据。

相关文章