一、今天做了什么

1. 域名解析:renjiaxing.ren 的 A 记录 → 154.8.147.160(10 分钟生效)
2. 免费证书:申请腾讯云 90 天免费 DV 证书(TrustAsia CA)
3. 配置 HTTPS:Nginx 加载证书,HTTP 自动跳转 HTTPS
4. 排查"网站加载慢":最终发现是模板引用的境外 CDN 资源被墙
5. 资源本地化:font-awesome、jquery 下载到本地 static/,删除 busuanzi、mermaid

二、排查全程回顾(走弯路的每一步)

现象

电脑浏览器打开网站要 15-30 秒才出页面。手机秒开。

弯路 1:怀疑 Let’s Encrypt 证书的 OCSP 被墙

当时的证书:Let's Encrypt
Windows curl 报错:CRYPT_E_REVOCATION_OFFLINE(吊销服务器离线)
分析:LE 的 OCSP 服务器在国内被墙,Windows schannel 检查吊销失败
行动:换腾讯云 TrustAsia 证书
结果:curl 不报错了,但 TLS 握手还是 15 秒——问题没解决

弯路 2:怀疑 TrustAsia 证书链的吊销检查

测试了所有吊销检查端点:
  ✓ 叶子证书 OCSP —— 0.19 秒(快)
  ✓ 中间证书 OCSP —— 快
  ✓ 中间证书 CRL —— 快
  ✓ 交叉根证书 CRL —— 0.29 秒(快,762 字节合法 CRL)
分析:TrustAsia 的"根证书"实际是波兰 Certum 交叉签发的,
     怀疑 Windows 把交叉根当中间证书查 CRL → 查 Certum 波兰服务器超时
行动:开启 OCSP Stapling(服务器把吊销状态钉在握手包里)
结果:stapling 生效了(OCSP Response Status: successful),
     curl 还是 15 秒——问题依旧

弯路 3:怀疑 Windows 客户端自身

测试:
  ✓ 所有吊销检查 URL 直连都快
  ✓ 服务器本地握手 4 毫秒
  ✓ curl --ssl-no-revoke 秒过(证明问题在吊销检查)
  ✓ 手机同一 WiFi 秒进(排除网络路径问题)
行动:禁用 Windows 自动根证书更新(CTL 更新)
结果:curl 变快了!但浏览器还是慢——问题还在

弯路 4:真正的答案——F12 网络面板

浏览器 F12 → Network 标签 → 刷新 → 看到两个请求卡 30 秒:
  https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css
  https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.min.js

真相:jsDelivr CDN 在国内被墙!
模板 extend_head.html 是从 sulv 博客样例复制来的,
里面带了三个境外 CDN 引用:jsDelivr(两个)+ busuanzi 统计。
浏览器加载页面时死等这些资源超时——这就是"网站慢"的真正原因。

三、为什么一开始找不到?

复盘诊断过程,犯了三个错误:

错误 1:被第一个证据带偏(锚定效应)

第一条证据:curl 报 CRYPT_E_REVOCATION_OFFLINE
→ 这是真实的问题!LE 证书确实有 OCSP 被墙的问题
→ 但它只是问题之一,不是全部

后续所有排查都围绕"证书/吊销"展开,
因为第一个证据太强,形成了思维锚定。
换了证书、开了 stapling、改了注册表——
每一步都解决了一部分问题,但"浏览器慢"的主因一直在别处。

错误 2:用 curl 的诊断结果代表浏览器的体验

curl 测的是:纯 TLS 握手速度
浏览器慢的是:整个页面加载(HTML + CSS + JS + 各种外部资源)

curl 的"TLS 握手 15 秒"是真实存在的(schannel 吊销检查),
但它被解决后,浏览器依然慢——因为浏览器的慢来自另一个层面:
页面加载的外部资源被墙。

错误 3:没有第一时间打开 F12

F12 网络面板是浏览器问题排查的第一工具,
一秒钟就能看到哪个请求卡住了。

但整个排查过程绕了一大圈:
证书 → OCSP → CRL → 交叉签名 → CTL → 注册表……
最后才想到看浏览器自己报告的网络请求时间线。

四、方法论教训

1. 先分层,再排查

网站访问慢 = 多层问题可能叠加:

┌─ 网络层:DNS 解析慢?TCP 连接慢?丢包?
├─ TLS 层:证书链验证慢?吊销检查超时?
├─ HTTP 层:服务器响应慢?
└─ 资源层:页面引用的 CSS/JS/图片/CDN 慢? ← 今天的主因

每次排查先确认在哪一层,而不是扎进第一层看到的错误里。

2. 工具要对应层级

层级 对应工具
DNS nslookup、dig
TCP/TLS curl -w 计时、openssl s_client、Test-NetConnection
HTTP 响应 curl -v、服务器日志
页面加载(资源层) 浏览器 F12 → Network 面板 ← 最直观

3. 锚定效应是排查的大敌

第一个错误线索会强烈主导后续判断。解法:把"现象"和"原因"分开记——

现象清单(不预设原因):
  ✓ curl TLS 握手 15 秒
  ✓ 浏览器页面 30 秒才出来
  ✓ 手机秒开
  ✓ 百度秒开

逐个现象找原因,而不是找一个原因解释所有现象。
"浏览器慢"和"curl 慢"可能是两个独立的问题。

4. 客户端报错 ≠ 服务端问题

curl 报 CRYPT_E_REVOCATION_OFFLINE → 客户端的吊销检查失败
→ 但不等于服务器配置错了
→ 只是客户端(Windows schannel)自身的行为限制

同理:浏览器加载慢 → 先看浏览器请求了哪些资源
→ 而不是假设服务器慢

五、今天的实际收获

✅ 域名 + ICP 备案 + HTTPS 全链路打通
✅ 学会了免费证书申请、Nginx 证书配置、OCSP Stapling
✅ 理解了 Windows schannel 吊销检查的 15 秒超时机制
✅ 理解了 Let's Encrypt 被墙、TrustAsia 交叉签名链等真实世界问题
✅ 发现了境外 CDN 在国内的可用性问题(jsDelivr、busuanzi、unpkg)
✅ 完成了资源本地化(font-awesome、jquery 已存本地 static/)
✅ 最大的收获:排查方法论的教训——分层、对工具、防锚定

六、后续待办

□ GoatCounter 自托管访问统计(Docker + Nginx 反代)
□ 博客性能:确认无其他被墙资源
□ 证书 90 天续期提醒(腾讯云免费证书)
□ 备份:config.yml、证书文件、extend_head.html 已改动的部分

附录:关键命令与输出

1. TLS 握手耗时诊断(决定性问题一)

# ↓ 本地 Windows PowerShell
curl.exe -o NUL -s -w "DNS解析: %{time_namelookup}s`nTCP连接: %{time_connect}s`nTLS握手: %{time_appconnect}s`n总耗时: %{time_total}s" https://www.renjiaxing.ren
DNS解析: 0.008654s
TCP连接: 0.042818s
TLS握手: 15.899862s     ← 问题锁定在 TLS 握手阶段
总耗时: 15.947801s

2. Let’s Encrypt 证书的吊销报错(触发换证书)

* schannel: next InitializeSecurityContext failed: CRYPT_E_REVOCATION_OFFLINE (0x80092013)
- 由于吊销服务器已脱机,吊销功能无法检查吊销。

3. OCSP/CRL 端点逐个测速(全部正常,排除吊销端点被墙)

# ↓ 本地 Windows PowerShell
curl.exe -o NUL -s -w "OCSP总耗时: %{time_total}s" http://ocsp.wt.trustasia.com/TrustAsiaDVTLSRSACA2024
curl.exe -o NUL -s -w "CRL地址: %{time_total}s 下载大小: %{size_download}字节`n" http://certum-crl.wt.trustasia.com/ctnca.crl
OCSP总耗时: 0.190802s
CRL地址: 0.294140s 下载大小: 762字节

4. OCSP Stapling 验证

# ↓ 远程服务器
echo QUIT | openssl s_client -connect www.renjiaxing.ren:443 -status 2>/dev/null | grep -A3 "OCSP Response Status"
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Responder Id: 1CBA9557F55273205946684A5864C8AC1DC191BC

5. 决定性证据:F12 网络面板发现卡顿请求

https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css   30 秒
https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.min.js                30 秒
https://busuanzi.ibruce.info/busuanzi?jsonpCallback=...                     35 秒

6. 修复:资源本地化

# ↓ 远程服务器
sed -i 's|https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css|/font-awesome.min.css|; s|https://cdn.jsdelivr.net/npm/jquery@3.6.3/dist/jquery.min.js|/jquery.min.js|' /home/renbudang/myblog/layouts/partials/extend_head.html
sed -i '/busuanzi/d' /home/renbudang/myblog/layouts/partials/extend_head.html

7. Windows CTL 更新禁用(解决 schannel 侧慢)

# ↓ 本地 Windows PowerShell(管理员)
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot" -Force | Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot" -Name "DisableRootAutoUpdate" -Value 1 -Type DWord