0

curl测试网站HTTPS证书有效期命令:3种实用方法+PowerShell适配指南

2026.05.25 | youres | 17次围观

为什么要主动检测HTTPS证书有效期?

HTTPS证书过期是导致网站无法访问的常见原因之一,浏览器会直接拦截并提示「您的连接不是私密连接」,不仅影响用户体验,还会被搜索引擎判定为不安全站点,直接影响SEO排名。对于运维人员来说,尤其是管理多个域名的场景,掌握快速检测证书有效期的方法,能提前排查风险,避免证书过期导致的线上故障。

方法1:基础版curl命令(Linux/macOS原生curl)

对于Linux、macOS等原生带curl的系统,最简单的方法是用-v参数查看详细握手信息,过滤出证书到期时间:

curl -v https://www.youres.cn 2>&1 | grep "expire"

参数说明:

  • -v:输出完整的请求响应过程,包含SSL握手阶段的证书信息
  • 2>&1:将错误输出(STDERR)重定向到标准输出(STDOUT),避免过滤不到信息
  • grep "expire":过滤包含expire的行,直接定位证书到期时间

示例输出:

*  expire date: 2027-05-25 12:00:00 GMT

输出中的日期就是当前域名的HTTPS证书到期时间。

方法2:精准获取证书到期时间(过滤无用信息)

基础版命令会输出很多无用信息,如果需要只获取到期时间,适合脚本调用的简洁版本,可以用下面的命令:

curl -v --silent https://www.youres.cn 2>&1 | grep -i "expire date" | cut -d: -f2-

参数说明:

  • --silent:不显示进度条、请求耗时等无用信息,输出更干净
  • -i:grep忽略大小写,避免因为大小写问题过滤不到
  • cut -d: -f2-:以冒号为分隔符,截取第二部分及之后的内容,直接输出到期时间

示例输出:

 2027-05-25 12:00:00 GMT

方法3:获取证书完整信息(含颁发者、序列号)

如果需要排查证书的颁发者、序列号、签名算法等完整信息,可以用下面的命令,输出SSL证书相关的所有内容:

curl -v --silent https://www.youres.cn 2>&1 | grep -A 30 "SSL certificate"

参数说明:-A 30表示显示匹配到SSL certificate的行之后的30行内容,基本覆盖证书的所有信息。

如果需要保存完整信息到本地文件,方便后续排查,可以用重定向:

curl -v https://www.youres.cn > cert_info.txt 2>&1

Windows用户适配:PowerShell的替代方案

很多Windows用户会发现直接运行上面的curl命令报错,原因是Windows PowerShell中的curlInvoke-WebRequest的别名,并非原生curl,所以需要用两种方案解决:

方案1:安装原生curl

  • Windows 10 21H2及以上版本:在「设置-应用-可选功能」中搜索「curl」,安装后即可使用原生curl命令
  • 用包管理器安装:Chocolatey用户执行choco install curl -y,Scoop用户执行scoop install curl

方案2:用PowerShell原生命令替代

如果不想安装原生curl,可以用PowerShell自带的Invoke-WebRequest命令获取证书到期时间,命令如下:

(Invoke-WebRequest -Uri https://www.youres.cn -UseBasicParsing).Certificate.ExpiryDate

参数说明:-UseBasicParsing避免调用IE引擎解析HTML,提升执行速度,同时避免权限问题。

如果需要批量检测多个域名的证书到期时间,可以用下面的PowerShell脚本:

 = @("www.youres.cn", "blog.youres.cn")
foreach ( in ) {
    try {
         = (Invoke-WebRequest -Uri "https://" -UseBasicParsing -TimeoutSec 10).Certificate
        Write-Host " 证书到期时间: "
    } catch {
        Write-Host " 检测失败: " -ForegroundColor Red
    }
}

批量检测多个域名证书有效期(Shell脚本)

对于Linux服务器运维人员,如果需要批量检测几十上百个域名的证书到期时间,可以用下面的bash脚本,配合域名列表文件实现一键检测:

#!/bin/bash
# 域名列表文件,每行一个域名
DOMAIN_FILE="domains.txt"
# 告警阈值:证书到期时间小于30天则告警
ALERT_DAYS=30

while read -r domain; do
    # 跳过空行
    [[ -z "" ]] && continue
    # 获取证书到期时间
    expire_date=
    if [[ -z "" ]]; then
        echo "[ERROR]  获取证书信息失败"
        continue
    fi
    # 计算剩余天数(需要系统支持date命令解析日期)
    expire_timestamp=
    current_timestamp=
    remain_days=
    echo " 证书到期时间: ,剩余天数: "
    # 告警提示
    if [[  -lt  ]]; then
        echo "[ALERT]  证书剩余天数小于  天,请及时续期!" | mail -s " 证书即将过期" admin@youres.cn
    fi
done < ""

使用方法:新建domains.txt文件,每行写一个需要检测的域名,然后运行脚本即可。

常见问题排查

  • 执行命令后没有expire相关输出?可能是curl版本太旧,不支持显示证书信息,升级curl到最新版即可;也可能是网站使用的是TLS 1.3,需要添加--tlsv1.3参数强制使用TLS 1.3握手。
  • Windows下curl命令报错「不是内部或外部命令」?说明没有安装原生curl,按照上面的方案1安装即可,或者使用PowerShell的替代命令。
  • 获取的证书到期时间和实际不符?可能是服务器时间不正确,或者使用的是通配符证书,需要确认域名是否和证书的SAN(主题备用名称)匹配。

相关阅读

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论
881文章数 0评论数
作者其它文章