在浏览器阻止网站之前检查网站的SSL证书过期时间

没有什么比全屏红色页面上写着"您的连接不是私密的"更快地摧毁网站信誉。这个页面最常见的原因是一件事——SSL证书已过期。好消息是它非常容易防止:只需知道证书还剩多少天,并定期提前检查。

SSL证书过期时会发生什么

当SSL证书过期时,每个浏览器(Chrome、Safari、Firefox、Edge)都会在访客到达网站之前将其停留在警告页面。用户必须自己承担风险才能进入——而大多数人只是关闭标签页然后去别处。

为什么SSL证书的有效期比您想象的要短

根据行业标准,SSL证书的有效期越来越短。如今付费证书最多只能签发大约1年,而免费的最流行的Let's Encrypt仅持续90天。这意味着没有自动续期系统的话,您必须每3个月记住一次续期日期。

SSL类型证书有效期支持自动续期?
Let's Encrypt(免费)90天是 —— 如果设置了Certbot / DirectAdmin
DV SSL(付费)最多约1年取决于提供商
OV / EV SSL最多约1年手动续期+身份验证

如何检查SSL证书过期日期

方法1 —— 在线工具(最简单)

只需在检查器中输入域名,它就会显示过期日期、颁发者和剩余天数。像 dnsxray.com 这样的域名健康检查工具有一个SSL部分,在单次查找中显示证书状态以及DNS、电子邮件和WHOIS——一次检查显示所有内容,无需打开多个网站。

方法2 —— 从浏览器查看

打开网站,单击URL旁边的锁定图标→查看证书详细信息。您会看到"有效期至"字段直接显示日期——适合快速单站点检查。

方法3 —— openssl命令

对于想要从终端检查的系统管理员:

echo | openssl s_client -servername example.com \
  -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -dates

输出显示 notBefore 和 notAfter —— notAfter 行是过期日期。

检查前理解证书链

安装在您的网络服务器上的SSL证书不会直接与浏览器验证——它依赖于由三层组成的信任链:根CA、中间CA和您自己的最终实体证书。理解这个结构可以告诉您除了过期日期之外还需要检查什么。

层级示例典型有效期过期时的影响
根CADigiCert Global Root G220–30年所有浏览器不信任网站
中间CARapidSSL TLS RSA CA G15–10年链断裂 —— 某些设备错误
最终实体(您的)example.com90天–1年网站被阻止

根CA和中间CA通常持续时间足够长,不会成为问题,但如果中间证书丢失或安装不正确,即使您的主要证书尚未过期,浏览器也会显示"证书链不完整"错误。像 dnsxray.com 这样的工具会自动报告链的完整性以及过期日期。

使用curl和Python自动监控SSL

如果您管理多个网站并需要每日SSL监控而无需为每个网站打开浏览器,您可以编写脚本来检查并将其安排为cron作业。

方法4 —— 使用curl检查(适合cron)

# 使用完整证书信息检查过期日期
curl -v --head https://example.com 2>&1 | grep "expire date"

# 简短形式 —— 仅过期日期
curl -v --silent --head https://example.com 2>&1 \
  | grep "expire date"

方法5 —— 多个域的Python脚本

import ssl, socket
from datetime import datetime

def check_ssl(hostname, port=443):
    ctx = ssl.create_default_context()
    with ctx.wrap_socket(socket.socket(), server_hostname=hostname) as s:
        s.settimeout(5)
        s.connect((hostname, port))
        cert = s.getpeercert()
    expires = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
    days_left = (expires - datetime.utcnow()).days
    return days_left, expires.strftime('%Y-%m-%d')

for domain in ['example.com', 'another-site.com']:
    days, date = check_ssl(domain)
    status = 'OK' if days > 30 else ('WARNING' if days > 0 else 'EXPIRED')
    print(f'{domain}: {status} — expires {date} ({days} days)')

此脚本可以通过cron运行,例如每天,当任何域剩余天数少于30天时发送电子邮件警告。

DV、OV和EV SSL —— 差异以及如何检查每种

在审计SSL时,您还应该知道网站使用的证书级别,因为每种类型都有不同的验证过程和续期时间表。

类型验证内容颁发时间最适合
DV(域验证)仅限域所有权几分钟博客、初创公司、普通网站
OV(组织验证)域+组织身份1–3个工作日商业网站、组织
EV(扩展验证)完整组织验证(公司注册)3–7个工作日银行、大型电子商务网站

DV续期很快很容易。OV和EV每次都需要新的身份证明文件,所以在过期前至少1-2周开始续期过程——而不是只提前30天。

通配符SSL和多域SAN —— 需要查看的内容

具有多个子域或多个域名的网站通常使用两种特殊证书类型之一。您需要验证所有涵盖的名称仍然有效且正确列出。

检查证书详细信息时,始终检查 Subject Alternative Name 字段以确认所有正在使用的域和子域都被涵盖。如果您运行HTTP和HTTPS版本,请测试HTTP正确重定向到所有域上的HTTPS。

检查不仅仅是"过期日期"

未过期的SSL并不意味着没有问题。您还应该检查这三点。

30天规则:目标是每个月至少检查一次每个网站的SSL,并在有30天或更多天时采取续期行动。不要等到只剩几天——某些续期(尤其是OV/EV)需要几天进行身份验证。

将SSL设置为自动续期

最好的方法是根本不必记住任何事情——使用自动续期。

即使设置了自动续期,您仍应定期检查,因为自动续期可能会无声地失败(例如DNS更改或端口80被阻止)。

养成检查的习惯:打开 dnsxray.com 每月检查一次您的域,查看SSL部分了解剩余天数,如果即将过期则提前续期——如果您管理多个网站,请使用多域检查功能。

常见问题

问:使用免费的Let's Encrypt,我必须每90天自己续期一次吗?

不,如果设置了自动续期——大多数DirectAdmin托管会自动为您续期。您只需定期检查它是否真的在工作。

问:SSL过期时网站会完全消失吗?

网站仍然存在,但访客首先会点击警告页面。许多人不会点击——所以您会丧失真实流量,直到续期为止。

问:我检查了,还剩10天——应该怎么办?

如果您使用Let's Encrypt,立即触发续期(通常在几分钟内完成)。如果是付费SSL,请立即与提供商联系,因为身份验证可能需要时间。

问:AsiaGB为我管理SSL吗?

是的——AsiaGB托管为您签发免费SSL并设置自动续期。对于想要付费SSL(DV/OV/EV)的客户,团队会帮助安装它并在过期前提醒您。

总结:过期的SSL是网站被阻止的主要原因之一。通过每月检查一次过期日期、在剩余30天或以上时续期以及设置自动续期来防止它——但仍要定期重新检查,因为自动续期可能会无声地失败。

每个计划上都包括免费SSL和自动续期

AsiaGB托管为每个网站提供免费SSL并设置自动续期——不再有过期证书。SSD托管起价500泰铢/年,99% 正常运行时间,DirectAdmin。

查看SSL服务