检查前:先选对域名,再确认时间
- 记录地址栏里的完整主机名,例如www.idctalk.com。根域名与www域名应分别检查,不能只凭其中一个结果推断另一个。
- 确认电脑日期、时间和时区合理。判断有效期时,要把证书时间与当前时间放到同一时区比较。
- 从访客端取得的是当前网络路径下的线上证书。如果网站使用CDN或反向代理,它不一定是源站服务器保存的那张证书。
站点需要客户端证书时,先交管理员确认访问条件,不要为检查有效期提供账号密码,也不要绕过浏览器安全警告。
方法一:在Chrome证书查看器中看有效期
- 访问需要检查的HTTPS页面,确认地址栏域名;若有重定向,检查最终访问的域名。
- 打开Chrome开发者工具。在Windows、Linux或ChromeOS中按Ctrl+Shift+P打开命令菜单,输入privacy,选择Show privacy and security。界面名称可能随版本或语言不同而变化。
- 进入Security的Overview,点击View certificate打开主来源证书查看器。
- 读取证书主体、签发者与有效期;不要只截普通网页或只看地址栏图标。

图中证书CN为idctalk.com,签发者为YR1 / Let's Encrypt;有效期显示2026-09-12 06:08:00至2026-12-11 06:07:59。这是一次查看得到的样本,不是网站长期使用同一证书的承诺,也不是实时监控结果。证书续期后,重新打开查看器可能看到新的日期。
方法二:用OpenSSL分两步读取线上证书
先运行openssl version确认工具可用。如提示找不到命令,请先使用浏览器路线或由管理员配置工具。
第一步:获取目标端点返回的证书
在独立工作目录执行下面的命令。文件名仅用于本次检查,请避免覆盖已有文件;检查其他网站时,把两处主机名一起替换为实际目标,不要写协议、路径或账号信息。
openssl s_client -connect www.idctalk.com:443 -servername www.idctalk.com -showcerts </dev/null > tls-session.txt 2> tls-errors.txt
fetch_rc=$?
printf 'fetch_exit=%s\n' "$fetch_rc"
cat tls-errors.txt
-connect指定主机与443端口,-servername明确发送SNI名称。-showcerts显示服务端发送的证书列表,这不是已经验证成功的证书链。标准输出和错误输出分别保存,不隐藏网络或握手错误;退出码也要在下一条命令前记录。
获取失败时,先看错误记录里的DNS、连接、超时或TLS信息。连接长时间无响应可中断并记录中断情况,不将它当作“证书已过期”。即使退出码为0,也要查看验证信息;s_client默认可在证书验证错误后继续,它不是凭返回码就能认定安全的测试。
第二步:解析日期,再检查到期阈值
确认上一步已取得证书后,再解析保存的会话文本。不要改成一条隐藏错误的管道;本例从文件读取第一张证书,需核对它确实是目标端点的叶证书。
openssl x509 -in tls-session.txt -noout -subject -issuer -dates
parse_rc=$?
printf 'parse_exit=%s\n' "$parse_rc"
解析成功后,notBefore是有效期开始,notAfter是有效期结束。以输出实际标注的时区为准;如果显示GMT,先与当前时间统一时区,不能直接拿浏览器未注明时区的数字作比较。解析失败可能是文件不存在、没有证书或内容损坏,不能解读成到期。
openssl x509 -in tls-session.txt -noout -checkend 0
expiry_rc=$?
printf 'expiry_exit=%s\n' "$expiry_rc"
-checkend的参数单位是秒。0用于检查到期条件;需要提前预警时,可换成自己的阈值,例如-checkend 86400检查未来一天的到期风险。官方定义是:将在指定秒数内到期时返回非0,否则返回0。遇到非0必须结合错误文本及前面的解析结果判断,不能把所有非0都算作证书到期。
本段代码是操作示例,不是本次实测输出。checkend并不检查notBefore是否已到、主机名是否匹配、证书链是否可信、是否吊销或页面是否有混合内容。返回0只说明这项到期阈值检查通过,不代表网站整体安全。
实际样本:先联网采集,再在终端读取保存的证书
2026年10月14日15:39(UTC+8),本站使用OpenSSL 3.5.6连接www.idctalk.com:443,并发送www.idctalk.com作为SNI,保存此次返回的叶证书。采集日志记录网络步骤返回0,并保留错误输出供内部核查。

截图中的subject为CN=idctalk.com,issuer为C=US, O=Let's Encrypt, CN=YR1。日期显示notBefore=Sep 11 22:08:00 2026 GMT,notAfter=Dec 10 22:07:59 2026 GMT;本地解析与checkend 0的退出码均为0,后者提示Certificate will not expire。
这说明此次保存证书的到期检查通过,并不证明以后访问时仍收到同一证书,也不证明主机名、信任链、吊销状态或网站整体安全。浏览器截图未标时区,应分别保留原始显示,不能仅凭相差几个小时就判为不一致。
三个时间点怎么理解?

人工判断有效期,需要同时看起点、终点和当前时间。还没到notBefore,与已经超过notAfter,是不同问题;两者也不同于“未来一段时间内即将到期”。因此,读取完整日期与执行checkend是互补步骤,不要只保留一行通过提示。
发现异常后,把什么交给管理员?
- 目标主机名、检查时间和时区,以及访问是否发生重定向。
- 证书主体、签发者、完整有效期;需要确认域名匹配时,应核对证书的域名覆盖信息,而不只看CN。
- 命令版本、原始命令、标准输出、错误文本和各步骤退出码。截图应与这组日志来自同一次采集。
若已过期或接近到期,交管理员核查自动续期及CDN、负载均衡等对外节点的证书绑定;本文不修改线上配置。如果有效期看起来正常,但浏览器仍报警,应继续检查域名匹配、信任链、设备时间、网络代理或混合内容等原因,不把“未到期”当作忽略警告的理由。
常见问题
1、网站能打开,是否说明证书没过期?
不能单凭能打开下结论。需要检查当前域名实际返回的证书与有效期,也不要忽略浏览器警告。证书日期正常同样不能排除其他HTTPS问题。
2、www域名与根域名需要分别查吗?
建议分别查。它们可能重定向到同一站点,也可能走不同入口;即使使用同一张证书,也应确认实际访问路径和域名覆盖,而不是凭一边的结果推断另一边。
3、为什么浏览器和OpenSSL看到的证书不同?
先核对是否是同一个完整主机名、是否发生重定向、检查时间是否相近,以及命令是否指定SNI。CDN节点、网络代理或续期切换也可能造成差异。保留各自证据交管理员确认,不直接断言某个工具出错。
4、checkend通过,是否代表HTTPS完全安全?
不代表。它只做指定时间阈值的到期判断,不替代有效期起点、主机名、信任链、吊销状态与页面资源检查。










































