一、今天做了什么
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