最近做了一个 简单的 SSL 证书监控网站,想和大家分享一些开发过程中的经验。项目地址放在最后了,先聊聊技术实现。

起因

之前遇到过几次 SSL 证书过期导致服务中断的情况,每次都是用户发现后才去处理,很被动。市面上有一些监控工具,但要么太重,要么功能不够用,就想着自己做一个。

技术选型

Next.js 16 + shadcn/ui + TypeScript

选 Next.js 是因为:

  • App Router 的开发体验很好,路由和文件结构对应

  • Server Components 减少了客户端 JavaScript

  • 内置的图片优化、字体加载等开箱即用

shadcn/ui 是基于 Radix UI 的组件库,优点是:

  • 组件复制到项目中,完全可控

  • 使用 Tailwind CSS,样式定制方便

  • Accessibility 做得很好

Drizzle ORM + PostgreSQL

之前用过 Prisma,这次试了 Drizzle,感觉更轻量:

  • 类型生成更快

  • SQL 操作更直观

  • 查询性能更好

better-auth 认证系统

这个是最近发现的,比 NextAuth 更新:

  • TypeScript 支持更好

  • API 设计更简洁

  • 支持邮箱密码 + 多种 OAuth(GitHub、Google)

遇到的一些坑

1. 证书链验证的复杂性

一开始以为 SSL 证书检查很简单,就是获取证书信息。后来发现证书链验证很复杂:

  • 需要验证每个证书的签名

  • 检查证书链的完整性

  • 判断根证书是否可信(浏览器内置)

  • 处理中间证书缺失的情况

解决方案是写了一个完整的证书链提取和验证模块,包括:

  • 从 TLS 连接提取完整证书链

  • 验证每个证书的签名和有效期

  • 检测链断裂和不完整的情况

  • 树形结构可视化展示

2. 安全评分系统的设计

为了让用户快速了解证书的安全状况,做了一个 A+ 到 F 的评分系统。核心逻辑:


四个维度加权评分

- 证书有效性:30% - 链完整性:25% - 加密强度:25% - 协议版本:20%

如果有严重问题(如证书过期),评级上限为 C

难点在于:

  • 权重分配如何合理

  • 扣分规则如何设计

  • 如何给出有价值的改进建议

最终采用了分层评分,每个维度独立计算,再加权汇总。

3. 多语言路由的 Hydration 问题

支持 6 种语言时遇到了 React Hydration 错误:

 // ❌ 错误做法 // app/[locale]/layout.tsx 中包含 <html> 标签 // 与根 layout 冲突 // ✅ 正确做法 // 根 layout 只有一个 <html> 标签 // 使用客户端组件动态更新 lang 属性 

4. Redis 缓存的降级处理

为了提升认证性能,加了 Redis 缓存。但需要考虑:

  • Redis 不可用时怎么办?

  • 缓存和数据库数据不一致怎么办?

解决方案:

  • Redis 连接失败自动降级到数据库

  • 数据库更新时主动失效缓存

  • 提供缓存统计 API 监控命中率

5. PageSpeed 优化

最初 Lighthouse 跑分只有 60 多分,主要问题:

JavaScript Bundle 太大

  • 使用 Next.js 的动态导入(dynamic import)按需加载组件

  • 移除未使用的依赖

  • 启用 Tree Shaking

图片优化

  • 使用 Next.js Image 组件自动优化

  • 添加合适的 placeholder

  • 启用图片懒加载

字体加载

  • 使用 next/font 自动优化字体

  • 减少字体变体数量

  • 使用 font-display: swap 避免布局偏移

关键渲染路径

  • 识别关键 CSS,内联到 HTML

  • 延迟加载非关键 JavaScript

  • 优化第三方脚本加载顺序

第三方脚本优化

  • Google Analytics、Crisp Chat 等延迟加载

  • 使用 defer/async 属性

  • 考虑使用 Web Workers 处理耗时任务

最终优化后:

  • Performance: 60 → 95

  • Accessibility: 85 → 98

  • Best Practices: 90 → 100

  • SEO: 100

一些技术亮点

证书链可视化

用树形结构展示证书链,支持展开 / 折叠,不同状态用颜色编码:

  • 绿色:有效

  • 黄色:即将过期

  • 红色:已过期

安全问题检测

自动检测不安全的加密算法:

  • MD5、SHA-1 签名算法

  • RC4、DES 等弱加密

  • TLS 1.0/1.1 等旧协议

多渠道通知

目前支持邮件、Slack、Discord、Telegram、飞书五种通知渠道,用户可以自由组合。

项目地址

https://guardssl.info

功能:

  • 免费 SSL 证书检查

  • 域名监控和过期提醒

  • 安全评分和改进建议

  • 多语言支持(中英日法西)

欢迎试用和反馈,有什么问题可以一起交流。


📌 转载信息
原作者:
yeheboo
转载时间:
2026/1/1 20:18:51