当前位置: 首页 > news >正文

SSL 证书检查:网站 HTTPS 的“体检报告”,过期前再也不用手忙脚乱

SSL 证书检查:网站 HTTPS 的“体检报告”,过期前再也不用手忙脚乱

去年公司官网突然在某个周五下午被用户投诉“打不开,浏览器提示不安全”。我登录服务器一看,原来是 SSL 证书过期了,而邮件提醒被扔进了垃圾箱。从那以后,我写了一个 SSL 证书检查工具,定期扫一遍所有域名,提前 30 天报警。这篇文章分享这个工具怎么用、证书的关键字段怎么看,以及如何用代码自己实现一个检查脚本。

🔧 工具:SSL 证书检查

一、这个工具能做什么?

SSL 证书检查工具用于获取网站 SSL/TLS 证书的详细信息,帮助诊断 HTTPS 配置问题。

  • 查看证书基本信息:颁发者(CA)、有效期(起止时间)、剩余天数。
  • 检查是否过期:自动判断当前时间是否在有效期内。
  • 显示主题备用名称(SAN):证书支持的所有域名,包括泛域名(如*.google.com)。
  • 快速诊断:适用于网站 HTTPS 报错、证书续期前确认等场景。

适用场景:

  • 用户反馈“网站不安全”,检查证书是否过期或域名不匹配。
  • 购买新证书后,确认是否正确安装。
  • 定期巡检自己名下所有域名的证书有效期,避免意外中断。

二、如何使用?

2.1 在线工具(推荐)

  1. 打开 上述 [ssl证书检查]
  2. 输入域名,例如 “www.google.com”不要带http://https://)。
  3. 点击「检查证书」按钮。
  4. 结果会显示:
    • 颁发者(Issuer)
    • 有效期起始与结束
    • 剩余天数(若为负数则已过期)
    • 主题(Subject)
    • 主题备用名称(SAN)
    • 签名算法

💡注意:仅支持 HTTPS 协议的域名(端口 443)。自签名证书或非标准端口可能无法获取。

2.2 命令行方式(OpenSSL)

如果你习惯命令行,可以快速检查证书:

# 获取证书并解析openssl s_client-connectwww.google.com:443-servernamewww.google.com2>/dev/null|openssl x509-text-noout

输出中包含 Validity(有效期)、Subject、X509v3 Subject Alternative Name 等信息。

只查看过期时间(更简洁):

echo|openssl s_client-connectwww.google.com:443-servernamewww.google.com2>/dev/null|openssl x509-noout-dates

三、证书关键字段解释

字段含义示例
颁发者 (Issuer)证书由哪个 CA 机构签发CN=DigiCert TLS RSA SHA256 2020 CA1, O=DigiCert Inc
有效期 (Validity)起止时间,UTC 格式notBefore=Apr 10 00:00:00 2025 GMT, notAfter=Apr 11 23:59:59 2026 GMT
剩余天数计算当前时间与 notAfter 的差值如还有 180 天过期
主题 (Subject)证书绑定的主要域名CN=www.google.com
SAN (Subject Alternative Name)证书支持的其他域名(含泛域名)DNS:*.google.com, DNS:google.com, DNS:www.google.com
签名算法加密签名算法sha256WithRSAEncryption

⚠️ 关键点:如果用户访问的域名不在 Subject 或 SAN 列表中,浏览器会报“证书不安全”。例如证书只签发给了 [www.example.com],但用户访问 api.example.com,就会报错。

四、技术实现:如何获取证书信息

工具的后端使用了 Node.js 的 tls 模块,核心代码如下:

const tls = require('tls'); const { promisify } = require('util'); async function getCertificate(hostname, port = 443) { return new Promise((resolve, reject) => { const socket = tls.connect({ host: hostname, port: port, servername: hostname, // SNI 支持 rejectUnauthorized: false // 即使证书无效也获取信息 }, () => { const cert = socket.getPeerCertificate(); socket.end(); resolve(cert); }); socket.on('error', reject); }); }

获取到的 cert 对象包含 issuer、subject、valid_from、valid_to 等属性。然后计算剩余天数并格式化输出。

工具本身不存储任何域名或证书数据,每次请求实时获取。

五、实战场景与排障

场景1:证书过期导致网站打不开

现象:浏览器访问显示 NET::ERR_CERT_DATE_INVALID。

用工具检查:输入域名,发现剩余天数为负数。
解决办法:立刻续签证书。建议设置自动续期(如 Let’s Encrypt 的 certbot 配合 cron)。

场景2:配置了新的证书,但浏览器仍报不安全

现象 :已经替换了证书,但访问时还是旧证书的信息。

可能原因:
浏览器缓存:清除缓存或开无痕窗口。
服务器配置错误:没有正确加载新证书(比如 Nginx 配置文件指向旧文件)。
中间负载均衡器/ CDN 没有刷新。

用工具检查:工具显示的是实时获取的证书,如果工具显示正确但浏览器显示错误,大概率是浏览器缓存。如果工具也显示旧证书,那就是服务器没配好。

场景3:证书域名不匹配

现象:证书是 *.example.com,但访问 example.com(不带 www)时报错。

用工具检查:查看 SAN 字段,确认是否包含 example.com。如果只有 *.example.com 和 > www.example.com,则 example.com 不在列表中,需要重新签发或添加。

场景4:自签名证书用于测试

内网环境常用自签名证书,浏览器会报不安全。工具也可以检查自签名证书(只要连接成功)。但需要注意 rejectUnauthorized: false 选项。

六、踩坑汇总(真实遇到过)

  1. 输入带 http:// 或 https:// 导致失败
    工具期望的是纯域名,比如 www.google.com。输入 https://www.google.com 会被当成包含协议部分的无效域名。所以请只输入域名。

  2. 某些 CDN 或反向代理隐藏了真实证书
    现象:你检查 www.example.com,工具返回的证书是 CDN 厂商的,而不是你自己服务器的。
    解释:如果域名通过 CDN(如 Cloudflare),TCP 连接终止在 CDN 节点,获取的是 CDN 的边缘证书。这是正常的,因为用户实际也是与 CDN 通信。

  3. 证书有效但提示“无法连接到服务器”
    原因:域名没有开放 443 端口,或者防火墙拦截。
    解决:先 ping 或 telnet domain 443 确认端口可达。

  4. 泛域名证书的 SAN 显示 *.example.com
    这代表该证书可以匹配任意子域名(如 mail.example.com、blog.example.com),但不能匹配 example.com 本身(没有点)。如果需要匹配裸域名,SAN 必须显式包含 example.com。

  5. 剩余天数计算时区问题
    证书有效期存储的是 UTC 时间。工具在计算剩余天数时会转换为本地时区后再比较,避免误判。但如果你临近午夜(23:59)检查,可能会相差一天,这是正常的。

七、自动化巡检脚本(基于 Node.js)

创建一个脚本,定期检查多个域名的证书剩余天数,提前告警:

const https = require('https'); function checkSSL(hostname) { return new Promise((resolve) => { const options = { hostname, port: 443, method: 'HEAD', rejectUnauthorized: false }; const req = https.request(options, (res) => { const cert = res.socket.getPeerCertificate(); if (!cert || !cert.valid_to) { resolve({ hostname, error: '无法获取证书' }); return; } const expiryDate = new Date(cert.valid_to); const daysLeft = Math.floor((expiryDate - Date.now()) / (1000 * 3600 * 24)); resolve({ hostname, issuer: cert.issuer.CN, daysLeft, valid_to: cert.valid_to }); }); req.on('error', (err) => resolve({ hostname, error: err.message })); req.end(); }); } // 批量检查 const domains = ['google.com', 'github.com', 'your-own-domain.com']; Promise.all(domains.map(d => checkSSL(d))).then(results => { results.forEach(r => { if (r.error) console.error(`${r.hostname}: ${r.error}`); else if (r.daysLeft < 30) console.warn(`⚠️ ${r.hostname} 证书将在 ${r.daysLeft} 天后过期!`); else console.log(`✅ ${r.hostname} 证书有效,剩余 ${r.daysLeft} 天`); }); });

可以将此脚本放入 cron(Linux)或任务计划(Windows),每天运行一次,邮件通知管理员。

八、总结

SSL 证书检查是网站运维的“体温计”,定期测量,才能避免证书过期导致的业务中断。VidDown 的在线工具免安装、免配置,适合临时检查;而命令行和脚本则适合批量自动化监控。

版权声明:本文为 VidDown 原创,欢迎分享,请保留出处。

http://www.jsqmd.com/news/943496/

相关文章:

  • 保姆级教程:手把手教你从中国移动云盘下载并安装Matlab 2023b(附文件安装密钥与替换bin文件夹避坑指南)
  • 2026年OpenClaw平替工具排行榜TOP5:同时满足金融级安全标准+内网隔离+本地化部署的厂商推荐 - 品牌2026
  • 【WCH蓝牙系列芯片】-基于CH585开发板—系统 SysTick 定时器应用
  • TrafficMonitorPlugins:构建高效智能的现代化系统监控生态
  • EmotiVoice:如何在5分钟内掌握2000种音色的情感语音合成神器
  • 告别虚拟机!在Windows 11上用WSL2+Kali Linux搭建Ettercap实战环境(附详细配置步骤)
  • PLC网络耦合器(IP转换网关)的功能作用
  • AI辅助开发:让快马智能生成多绘屏保卸载脚本,并解释系统命令奥秘
  • 低查重AI教材生成利器!一键搞定AI写教材,快速输出高质量教材内容!
  • 2026年6月肇庆贵金属回收权威门店排行 TOP5 黄金 + 铂金 + 白银回收 附电话地址 - 中业金奢再生回收中心
  • FPV竞速无人机入门指南:从模拟器到实战的完整路径
  • 学会“听”课——从被动接收到主动捕获 - 教育信息速递
  • 遥感数据处理实战:用ENVI的NNDiffuse算法提升GF2影像清晰度,对比Gram-Schmidt和PCA融合效果
  • ThinkSystem SR650/ST550等机型装Win Server 2019?别急,先看这份驱动兼容性避雷指南
  • 终极指南:如何快速解锁家庭网关的高级管理权限
  • DataWorks Data Agent 助力菜鸟 AI 数据研发 SuperETL 实践落地
  • langchain4j进阶:AI记忆与RAG
  • 用Python和Matlab搞定东南大学齿轮箱数据集:从数据读取到故障分类实战
  • ShawzinBot终极指南:3分钟掌握MIDI转游戏按键的简单方法
  • 【工程院院士等大咖云集、连续3届稳定EI检索】第四届遥感、测绘与地理信息系统国际学术会议(RSMG 2026)
  • 在Ubuntu 22.04上从零搭建SUMO仿真环境:新手避坑与第一个Hello World交通流
  • 2026年6月孝感贵金属回收权威门店排行 TOP5 黄金 + 铂金 + 白银回收 附电话地址 - 中业金奢再生回收中心
  • AI工具整合失效真相大起底,87%企业卡在L2→L3断层(附Gartner验证的4步穿透法)
  • 【会议征稿通知 | 佛山大学主办 | IEEE出版 | EI 、Scopus稳定检索】第九届结构工程与工业建筑国际学术会议(ICSEIA 2026)
  • 绝区零自动化革命:3步掌握智能游戏辅助工具的核心玩法
  • HarmonyOS WindowUtil 窗口属性查询详解:getWindowProperties 与快捷 isXxx 方法全解析
  • 蛋白质设计新范式:ProteinMPNN如何用AI重塑生命密码
  • 2026闽清黄金回收实测攻略|本地正规门店盘点,卖金避坑安心变现 - 行行星
  • iPhone 短信导出保存 5 种实用方法
  • 不只是安装:Keil C51 V9.61 新特性实测与51单片机编译效率提升指南