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

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
博客园 - 司徒正美
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
D
Docker
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
腾讯CDC
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Check Point Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
I
InfoQ
雷峰网
雷峰网
The Cloudflare Blog
美团技术团队
Engineering at Meta
Engineering at Meta

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
分享一个 SSL 证书监控网站的开发经验
yeahjw · 2026-01-01 · via V2EX

最近做了一个 简单的 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 )

guardssl

遇到的一些坑

1. 证书链验证的复杂性

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

  • 需要验证每个证书的签名
  • 检查证书链的完整性
  • 判断根证书是否可信(浏览器内置)
  • 处理中间证书缺失的情况

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

  • 从 TLS 连接提取完整证书链
  • 验证每个证书的签名和有效期
  • 检测链断裂和不完整的情况
  • 树形结构可视化展示

2. 安全评分系统的设计

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

四个维度加权评分
- 证书有效性:30%
- 链完整性:25%
- 加密强度:25%
- 协议版本:20%

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

难点在于:

  • 权重分配如何合理
  • 扣分规则如何设计
  • 如何给出有价值的改进建议

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

guardssl

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 、飞书五种通知渠道,用户可以自由组合。

guardssl

项目地址

https://guardssl.info

功能:

  • 免费 SSL 证书检查
  • 域名监控和过期提醒
  • 安全评分和改进建议
  • 多语言支持(中英日法西)

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