惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
SecWiki News
SecWiki News
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
小众软件
小众软件
C
CERT Recently Published Vulnerability Notes
Jina AI
Jina AI
N
Netflix TechBlog - Medium
GbyAI
GbyAI
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
C
Cybersecurity and Infrastructure Security Agency CISA
I
Intezer
T
Tor Project blog
P
Palo Alto Networks Blog
P
Privacy & Cybersecurity Law Blog
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
T
Tailwind CSS Blog
C
Check Point Blog
Cloudbric
Cloudbric
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
Forbes - Security
Forbes - Security
Last Week in AI
Last Week in AI
S
Security Affairs
博客园 - Franky
F
Fortinet All Blogs
量子位
M
MIT News - Artificial intelligence
C
Cisco Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
S
Secure Thoughts
V
Visual Studio Blog
AI
AI
美团技术团队
B
Blog RSS Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 三生石上(FineUI控件)
阮一峰的网络日志
阮一峰的网络日志
Engineering at Meta
Engineering at Meta
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
T
Threatpost
Cyberwarzone
Cyberwarzone

竹林里有冰的博客

Nuxt SSG 博客的尾斜杠到底怎么加? | 竹林里有冰的博客 小米 Xiaomi Book Pro 14 (Ultra X7) Linux 兼容性实测 | 竹林里有冰的博客 国内(大陆)版小米 FCM 熄屏断连:Rootless 环境下的尝试与可能的解决方案 | 竹林里有冰的博客 我没法访问 dl.google.com —— 记一次 TUN 下的网络 debug | 竹林里有冰的博客 Vercel 的缓存控制,你注意过吗? | 竹林里有冰的博客 小记 —— Caddy 在 Layer 4 上的流量代理实践 | 竹林里有冰的博客 你的域名后缀拖慢你的网站速度了嘛?——再谈 DNS 冷启动 | 竹林里有冰的博客 DNS 冷启动:小型站点的“西西弗斯之石” | 竹林里有冰的博客 HTTP/2 Server Push 已事实性“死亡”,我很怀念它 | 竹林里有冰的博客 Nuxt Content v3 中数组字段的筛选困境与性能优化 | 竹林里有冰的博客 后 OCSP 时代,浏览器如何应对证书吊销新挑战 | 竹林里有冰的博客 初试 Github Action Self-hosted Runner,想说爱你不容易 | 竹林里有冰的博客 DNS 解析延迟毁了我的图床优化 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(下):告别 DOM 操作,拥抱 AST 与函数式渲染 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(上):从暴力刷新、分块更新到 Morphdom 的华丽变身 | 竹林里有冰的博客 node-sass 迁移至 dart-sass 踩坑实录 | 竹林里有冰的博客 前端中的量子力学——一打开 F12 就消失的 Bug | 竹林里有冰的博客 2025 年,如何为 web 页面上展示的视频选择合适的压缩算法? | 竹林里有冰的博客 el-image 和 el-table 怎么就打架了?Stacking Context 是什么? | 竹林里有冰的博客 2025年,前端如何使用 JS 将文本复制到剪切板? | 竹林里有冰的博客 ssh 拯救世界——通过 ssh 隧道在内网服务器执行 APT 更新 | 竹林里有冰的博客 Cudy TR3000 吃鹅(daed)记 | 竹林里有冰的博客 使用 Cloudflare Workers 监控 Fedora Copr 构建状态 | 竹林里有冰的博客 基于 Cloudflare Workers 实现的在线服务状态检测告警系统 | 竹林里有冰的博客 构建部署在 Cloudflare Workers 上的 TG Bot | 竹林里有冰的博客 小爱课程表适配不完全指北——以 ZJUT 本科正方教务系统为例 | 竹林里有冰的博客 将博客从 waline v2 更新到 waline v3 | 竹林里有冰的博客 给家里云装上 Fedora 41 KDE 后,我是如何配置的 | 竹林里有冰的博客 为 Hexo 添加 follow 认证 | 竹林里有冰的博客 使用 GPT 对 waline 的评论进行审查 | 竹林里有冰的博客 基于 JavaScript 的 Hexo Fluid 主题 banner 随机背景图实现 | 竹林里有冰的博客 使用向日葵智能插座 C2 用电记录推算宿舍上次烧水时间 | 竹林里有冰的博客 使用 Caddy 反向代理 dockerhub 需要几步? | 竹林里有冰的博客 将 Rustdesk 中继服务从 Arch Linux 迁移至 Debian | 竹林里有冰的博客 自建图床小记五——费用 | 竹林里有冰的博客 自建图床小记四——上传脚本编写与图片迁移 | 竹林里有冰的博客 自建图床小记三—— SSL 证书的自动更新与部署 | 竹林里有冰的博客 自建图床小记二——使用 Workers 为 R2 构建 Restful API | 竹林里有冰的博客 自建图床小记一——图床架构与 DNS 解析 | 竹林里有冰的博客 在 Linux 下使用 mitmproxy 抓取安卓手机上的 HTTPS 流量 | 竹林里有冰的博客 为中柏 N100 小主机开启来电自启 | 竹林里有冰的博客 我的博客被完整地反向代理,并自动翻译成了繁体中文 | 竹林里有冰的博客 尝试体验 Fedora COPR 中的 allow SSH 功能 | 竹林里有冰的博客 在 Arch Linux 下配置使用 HP Laser 103w 打印机无线打印 | 竹林里有冰的博客 使用动态公网 ip + ddns 实现 rustdesk 的 ip 直连 | 竹林里有冰的博客 使用 Windows 虚拟机运行虚拟专用网客户端为 Linux 提供内网环境 | 竹林里有冰的博客 以 Archlinux 中 makepkg 的方式打开 rpmbuild | 竹林里有冰的博客 使用 Github Action 更新用于 rpm 打包的 spec 文件 | 竹林里有冰的博客 使用 Python 生成甘特图(Gantt Chart) | 竹林里有冰的博客 uniapp 中的图片预加载 | 竹林里有冰的博客 小记 - 尝试拼凑出 apt 仓库中的 deb 包下载地址 | 竹林里有冰的博客 在 Linux 下使用 mitmproxy 抓取 HTTPS 流量 | 竹林里有冰的博客 如何使用 docker 部署 onemanager | 竹林里有冰的博客 crontab 中简单的@语法糖 | 竹林里有冰的博客 备份 umami 数据库,并使用 TG Bot 保存 dump 文件 | 竹林里有冰的博客 在 JavaScript 中,箭头函数中的 this 指针到底指向哪里? | 竹林里有冰的博客 结合 Vue.js 与 php 完成的 web 期末大作业,讲讲前后端分离站点开发与部署中可能遇到的 CORS 跨域问题 | 竹林里有冰的博客 vuejs、php、caddy 与 docker —— web 期末大作业上云部署 | 竹林里有冰的博客 【翻译】使用 PHP 构建简单的 REST API | 竹林里有冰的博客 在 Hexo Fluid 主题中使用霞鹜文楷 | 竹林里有冰的博客 【翻译】GLWTPL——祝你好运开源许可证 | 竹林里有冰的博客 通过巴法云将向日葵智能插座接入米家,实现小爱同学远程控制 | 竹林里有冰的博客 使用 Root 后的安卓手机获取向日葵智能插座 C2 的开关 api | 竹林里有冰的博客 创建 b23.tv 追踪参数移除 bot | 竹林里有冰的博客 jinja2 中如何优雅地实现换行 | 竹林里有冰的博客 手动指定 python-selenium 的 driver path 以解决在中国大陆网络环境下启动卡住的问题 | 竹林里有冰的博客 从零开始的静态网页部署(到个人云服务器) | 竹林里有冰的博客 在运行OpenWRT的N1盒子上部署 QQBot | 竹林里有冰的博客 在浙工大宿舍使用路由器连接移动网络(校园网) | 竹林里有冰的博客 为红米 Redmi AC2100 路由器刷入 Padavan | 竹林里有冰的博客 Azure 教育订阅申请时遇到的麻烦 | 竹林里有冰的博客 执行 repo sync 后将 git-lfs 中的资源文件 checkout | 竹林里有冰的博客 隐式转发——骚套路建站方案 | 竹林里有冰的博客 在 vps 上配合 caddy 部署 siteproxy | 竹林里有冰的博客 onedrive(by abraunegg) —— 一个 Linux 下的开源 OneDrive 客户端(cli) | 竹林里有冰的博客 【翻译】关于2022年11月的事件的一些话[Z-Library] | 竹林里有冰的博客 【已过期】使用 vercel+supabase 免费部署 umami | 竹林里有冰的博客 我的博客部署方案 | 竹林里有冰的博客 使用 VirtScreen 将 Pad 作为副屏 | 竹林里有冰的博客 在 Archlinux 下使用 l2tp 协议连接校园网 | 竹林里有冰的博客 为 Element 添加自己喜欢的贴纸 | 竹林里有冰的博客 nodejs16:是我配不上 openssl 3 咯? | 竹林里有冰的博客 如何拯救失声的 hollywood | 竹林里有冰的博客 处理 fcitx5 的文字候选框在 tg 客户端上闪烁的问题 | 竹林里有冰的博客 使用caddy反向代理维基百科中文站点 | 竹林里有冰的博客 创建一个本地的 Fedora 镜像源 | 竹林里有冰的博客 好软推荐——FastOCR | 竹林里有冰的博客 抛弃PicGo,直接使用curl将图片上传到LskyPro | 竹林里有冰的博客 使用 Github Action 跑 rpmbuild | 竹林里有冰的博客 如何打出一个「-git」的rpm包 | 竹林里有冰的博客 雪藏在开源镜像站点中的那些常用却不为人知的软件 | 竹林里有冰的博客 在Fedora搭建jekyll环境——dnf module | 竹林里有冰的博客 pacman更新时遇到「GPGME 错误:无数据」 | 竹林里有冰的博客 PicUploader使用系列(二)——为KDE的dolphin添加右键快捷菜单 | 竹林里有冰的博客 PicUploader使用系列(一)——在Archlinux上使用Caddy部署PicUploader | 竹林里有冰的博客 使用AUR(Helper)安装软件时究竟发生了什么?对于常见的构建错误如何解决? | 竹林里有冰的博客 下载一份openharmony的源码 | 竹林里有冰的博客 在Windows与Linux双系统下共享蓝牙鼠标 | 竹林里有冰的博客 我在Archlinux上的常用软件 | 竹林里有冰的博客 安卓解包笔记 | 竹林里有冰的博客
2024年,Firefox 是唯一还在坚持执行在线的 SSL 证书吊销状态检查的主流浏览器 | 竹林里有冰的博客
竹林里有冰 · 2024-11-19 · via 竹林里有冰的博客

小试一下?#

在开始阅读后面的内容之前,或许你可以试试看你正在使用的浏览器能不能访问下面两个链接:

这两个链接分别是由 digicert 和 Let's Encrypt 维护的,特意维持了一个证书没过期,但被 CA 吊销的状态。

在我的 Firefox for Linux 上,两个链接我都无法打开。

这是预期行为。Firefox 在与目标站点建立 https 链接之前,先向 CA 提供的 OCSP 服务器打了一个 http 请求来判断目标站点的 ssl 证书是否有效(是否没有被 CA 主动吊销)。

在 Firefox for Android 上,我无法打开第一个链接,但可以打开第二个,这是因为 Mozilla 给 Android 用户设置的策略为「只对 EV 证书进行 ocsp 校验,跳过 DV 证书和 OV 证书」,似乎在竞争更加激烈的移动端,Firefox 为了加载速度做出了安全性上的妥协。

而在 Google Chrome / Microsoft Edge 上,OCSP 是不被支持的,chromium 团队在 2014 年就禁用了 OCSP 校验,且目前没有设置项允许用户手动开启,目前它只支持本地的 CRLSets 规则集

Safari 经我本人测试默认只对 EV 证书进行有效性检验。

在某些情况下(比如用户告知 CA 颁发给自己的证书私钥不慎被泄漏了,或者 CA 的颁发程序出现漏洞被人滥用,需要吊销在此期间发出去的所有证书),CA 需要吊销一些证书,并通过自己的渠道将被吊销的证书尽快告知所有用户——需要被吊销的证书和正常的证书在外观上没有任何区别,用户的浏览器必须依赖 CA 的外部消息通知才能知道哪些证书是被吊销的。

Firefox 是如何接收来自 CA 的吊销信息的?#

Firefox 通过提供了两种方案,以便用户从 CA 处得知目标站点的证书是否被吊销。

OCSP#

正如我前文所说的,Firefox 的 PC 端在与目标站点建立 https 连接之前,会先通过 http 协议向 CA 的 OCSP 服务器打一个 POST 请求来确认证书是否被吊销。

我们可以通过 openssl 拿到目标站点的 ssl 公钥,查看 CA 指定的 OCSP Server

openssl s_client -connect example.com:443 -servername example.com | openssl x509 -text -noout

访问第二个链接时的抓包结果访问第二个链接时的抓包结果

软失败#

这个请求一共有三种结果:

  1. 请求结果正常,证书没有被吊销:Firefox 继续和目标站点建立 https 连接
  2. 请求结果正常,证书被吊销:Firefox 拒绝和目标站点建立 https 连接,如同我在博客开头贴的图
  3. 请求结果异常(请求超时):Firefox 继续和目标站点建立 https 连接

透过在第三种情况,我们可以发现,Firefox 对 OCSP 检查的结果是软失败 (soft fail) 态度——即如果在 OCSP 过程中发生异常,Firefox 将不得不放弃 OCSP 检查并放行。根据 Mozilla Blog 的说法,如今有 9.9% 的 OCSP 检查都是超时的。

https://blog.mozilla.org/security/files/2020/01/figure4-ocsp_results.pnghttps://blog.mozilla.org/security/files/2020/01/figure4-ocsp_results.png

Firefox 中的相关配置项#

在 Firefox 的 about:config 配置中搜索,我们可以看到一些关于 OCSP 的配置项

  • security.OCSP.enabled: 是否开启 OCSP 检查,默认为 1
    • 0: 关闭 OCSP 检查
    • 1: 开启 OCSP 检查
    • 2: 只对 EV 证书进行 OCSP 检查
  • security.OCSP.required: 是否一定要通过 OCSP 才允许建立连接(即是否不允许“软失败”),默认为 false
    • false: 允许软失败
    • true: 不允许软失败
  • security.OCSP.timeoutMilliseconds.hard: 针对 EV 证书,OCSP 检查的超时时间,默认为 10000 (10 秒)
  • security.OCSP.timeoutMilliseconds.soft: 针对 DV 和 OV 证书,OCSP 检查的超时时间,默认为 2000(2 秒),移动端为 1 秒。

EV 证书相比 DV 和 OV 有更严苛的申请条件,区别可以参考DV、OV和EV SSL证书之间有什么区别?

弊端#

  • ocsp 不能在不增加用户负担的情况下使用硬失败(hard fail),对于无响应或者超时的 ocsp 验证只能直接放行,这意味着攻击者可以直接屏蔽浏览器和 CA 之间的连接,拖到 ocsp 超时,并不能有效保障用户免受攻击。
  • 在 ocsp server 响应或者连接超时前,与目标站点的 https 连接会被阻塞,这带来了更大的访问延迟。有时还会出现用户与 ocsp server 无法连接的情况
  • ocsp 是由用户浏览器主动向 CA 发起 http 请求,可能会导致用户隐私泄漏(IP 地址、位置、用户的部分浏览历史记录等)。即使 CA 故意不保留这些信息,地区法律也可能强制 CA 收集这些信息。

OCSP 装订 (OCSP stapling)#

这是一种新的方式,由目标站点的服务器主动向 CA 的 ocsp 服务器缓存 ocsp 信息(有效期最长为 7 天),并将其在用户访问时将相关信息一起提供给用户,避免用户直接向 CA 的服务器发起查询请求,能够规避部分弊端(避免 CA 收集用户信息,规避用户与 CA OCSP 服务器连接性不好等问题)。

目前,caddy 是默认开启 OCSP 装订的,而 nginx 可以在配置后手动开启。

可以采用 openssl 来查询目标站点是否开启了 OCSP 装订:

openssl s_client -connect example.com:443 -status

如果开启了 OCSP 装订,那么返回的数据中会有 OCSP Response Data 相关的描述

CRLite (WIP)#

CRLite2017 年 IEEE 安全和隐私研讨会上一组研究人员提出的一项技术,该技术可以有效地压缩吊销信息,使 300 兆字节的吊销数据可以变成 1 兆字节。CRLite 数据由 Mozilla 收集处理后推送给浏览器实现证书状态的本地查找,这项技术仍然处于开发阶段。

当浏览器使用 CRLite 查询对应站点的 ssl 证书的有效状态时,一般会有 5 种查询结果

  1. Certificate Valid,表示 CRLite 权威返回证书有效。
  2. Certificate Revoked,表示 CRLite 权威返回证书已被吊销。
  3. Issuer Not Enrolled, 这意味着正在评估的证书未包含在 CRLite 筛选器集中,可能是因为颁发证书的证书颁发机构 (CA) 未发布 CRL。
  4. Certificate Too New,表示正在评估的证书比 CRLite 筛选器新。
  5. Filter Not Available,这意味着 CRLite 过滤器要么尚未从 Remote Settings 下载,要么已经过时以至于停止服务。

Mozilla 计划每天发布 4 次 CRLite 的更新,以减少第 4 种情况。

速度优势#

CRLite 的本地数据查询相比起 OCSP 的在线查询拥有天然的优势,99% 的情况下,CRLite 会比 OCSP 快,其中 56% 的情况下,CRLite 会比 OCSP 快 100 毫秒以上。

https://blog.mozilla.org/security/files/2020/01/figure3-speedup_vs_ocsp.pnghttps://blog.mozilla.org/security/files/2020/01/figure3-speedup_vs_ocsp.png

此外,当 CRLite 不可用时,Firefox 仍然可以回退到传统的 OCSP 检测机制。

其他#

Let's Encrypt 在 2024 年 7 月发布博客,CA/Browser Forum在上一年 8 月通过了一向投票允许 Let's Encrypt 等公开信任的 CA 将设立 OCSP server 作为可选选项。他们计划在未来 6~12 月内宣布关闭 OCSP 服务的时间表。

参见#