Email:2225994292@qq.com
CNY
使用OpenSSL查看SSL证书是否被吊销
更新时间:2025-11-28 作者:SSL证书吊销

为帮助用户掌握用 OpenSSL 查看SSL证书吊销状态的方法,我将先解释SSL证书吊销的核心概念与常见场景,再分步骤详解 OpenSSL 命令实操,结合实例说明不同吊销状态的判断方式,同时补充注意事项与替代方案。

一、SSL证书吊销的核心认知:为何需要检查吊销状态?

SSL证书吊销是 CA 机构(证书颁发机构)在证书有效期内,因私钥泄露、域名所有权变更、证书配置错误等原因,提前终止证书有效性的操作。未及时识别吊销证书,可能导致:

  • 安全风险:攻击者利用已吊销证书伪造合法服务(如钓鱼网站),窃取用户数据;
  • 业务中断:浏览器(Chrome、Firefox)或客户端检测到吊销证书后,会弹出 “不安全连接” 提示,阻断用户访问;
  • 合规失效:金融、医疗等行业需符合《网络安全法》《个人信息保护法》,使用吊销证书将违反数据传输加密要求。

常见的证书吊销机制有两种:

1. CRL(证书吊销列表)CA 定期发布包含所有吊销证书序列号的列表,客户端通过下载列表校验;

2. OCSP(在线证书状态协议)客户端向 CA 的 OCSP 服务器发送查询请求,实时获取证书状态(推荐,响应速度更快)。

OpenSSL 作为开源加密工具集,可通过命令行直接对接这两种机制,实现证书吊销状态的快速核查。

二、前置准备:OpenSSL 环境搭建与证书获取

1. OpenSSL 安装验证

首先确保本地已安装 OpenSSL,Windows、Linux、macOS 环境的验证命令一致:

openssl version  # 查看版本,需确保为1.1.1及以上(支持OCSP stapling等新特性)
  • 若未安装:Linux(CentOS)用yum install openssl,Ubuntu 用apt-get install openssl,Windows 可下载OpenSSL 官网安装包,macOS 通过 Homebrew 安装brew install openssl

2. 获取待核查的SSL证书

需先获取目标域名或服务器的SSL证书文件(格式通常为 PEM、CRT),有两种获取方式:

(1)从目标服务器直接抓取证书

针对网站(如www.baidu.com),通过openssl s_client命令连接服务器并导出证书:

# 连接443端口(HTTPS默认端口),将证书保存到cert.pem文件
openssl s_client -connect www.baidu.com:443 -showcerts < /dev/null 2>/dev/null | openssl x509 -outform PEM -out cert.pem

命令解析:

  • -connect:指定目标域名与端口;
  • -showcerts:显示完整证书链(包括中间证书);
  • 2>/dev/null:屏蔽无关错误信息;
  • openssl x509:提取证书主体部分并保存为 PEM 格式。

(2)从本地文件读取证书

若已拥有证书文件(如 server.crt),直接跳过抓取步骤,进入后续核查流程。

三、方法一:通过 OCSP 协议实时查询证书状态(推荐)

OCSP是 CA 提供的实时证书状态查询服务,相比 CRL 更高效(无需下载完整列表),适合单证书快速核查。

步骤 1:提取证书的 OCSP 查询地址

证书中包含 CA 的 OCSP 服务器地址,需先从证书文件中提取:

# 从cert.pem证书中提取OCSP服务器地址
openssl x509 -in cert.pem -noout -ocsp_uri

示例输出(百度证书的 OCSP 地址):

http://ocsp.digicert.com

若输出为空,说明该证书未配置 OCSP 地址,需改用 CRL 方法查询。

步骤 2:提取证书链(中间证书 + 根证书)

OCSP 查询需验证证书链完整性,需先获取目标证书的 “中间证书”(由 CA 颁发,用于连接终端证书与根证书):

# 重新抓取证书链,保存完整链到chain.pem
openssl s_client -connect www.baidu.com:443 -showcerts < /dev/null 2>/dev/null > chain.pem

打开chain.pem文件,可看到多个以-----BEGIN CERTIFICATE-----开头的证书块,按顺序分别为:终端证书(目标证书)、中间证书 1、中间证书 2... 根证书。

步骤 3:执行 OCSP 查询

使用openssl ocsp命令向 OCSP 服务器发送查询请求,需指定:

  • 待查证书(-issuer 指定中间证书,-cert 指定终端证书);
  • OCSP 服务器地址(-url);
  • 根证书(-CAfile,用于验证 OCSP 响应的合法性)。

完整命令示例:

# 假设chain.pem中,中间证书为第2个证书块(需手动提取到intermediate.crt),根证书为第3个(提取到root.crt)
openssl ocsp -issuer intermediate.crt -cert cert.pem -url http://ocsp.digicert.com -CAfile root.crt -text

关键输出解读:判断证书是否吊销

1. 正常(未吊销)输出:

Response verify OK
cert.pem: good
    This Update: Nov 28 00:00:00 2025 GMT
    Next Update: Dec  5 00:00:00 2025 GMT
  • good:证书状态正常,未被吊销;
  • This Update:OCSP 响应生成时间;
  • Next Update:下次状态更新时间(期间无需重复查询)。

2. 已吊销输出:

Response verify OK
cert.pem: revoked
    This Update: Nov 28 00:00:00 2025 GMT
    Revocation Time: Nov 27 12:00:00 2025 GMT
    Reason: keyCompromise (0x1)
  • revoked:证书已被吊销;
  • Revocation Time:吊销时间;
  • Reason:吊销原因(keyCompromise = 私钥泄露,cACompromise=CA 私钥泄露,unspecified = 未指定)。

3. 查询失败输出:

OCSP response: no response sent

可能原因:OCSP 服务器不可达、网络防火墙拦截、证书已过期(需先检查证书有效期:openssl x509 -in cert.pem -noout -dates)。

四、方法二:通过 CRL 列表查询证书状态

CRL是 CA 定期发布的吊销证书清单,适合批量核查或 OCSP 服务不可用时使用。

步骤 1:提取证书的 CRL 地址

从证书中获取 CA 的 CRL 发布地址:

# 从cert.pem中提取CRL地址
openssl x509 -in cert.pem -noout -crldist

示例输出(阿里云证书的 CRL 地址):

http://crl3.digicert.com/sha2-ev-server-g6.crl

步骤 2:下载 CRL 文件

通过wget或浏览器下载 CRL 文件(格式为 DER 或 PEM):

# 下载CRL文件到crl.der
wget http://crl3.digicert.com/sha2-ev-server-g6.crl -O crl.der

步骤 3:解析 CRL 并查询证书状态

将 DER 格式的 CRL 转换为可读文本,并查询目标证书的序列号是否在吊销列表中:

1. 查看证书序列号

先获取待查证书的序列号(十六进制格式):

openssl x509 -in cert.pem -noout -serial

示例输出:

serial=0A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D

2. 解析 CRL 并搜索序列号

将 CRL 转换为文本格式,并用grep搜索目标序列号:

# 转换CRL为文本并搜索序列号
openssl crl -in crl.der -inform DER -text -noout | grep -A 5 "0A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D"

3. 结果判断

  • 若搜索到结果(包含Revocation TimeReason):证书已吊销;
  • 若未搜索到结果:证书状态正常(或 CRL 未更新,需确认 CRL 的发布时间)。

五、进阶操作:批量核查与自动化脚本

1. 批量核查多个证书

若需核查多个证书(如服务器集群的证书),可编写 Shell 脚本循环执行 OCSP 查询:

#!/bin/bash
# 批量核查证书状态的脚本(cert_list.txt为证书文件路径列表)
while read cert; do
    echo "=== 核查证书:$cert ==="
    # 提取OCSP地址
    ocsp_uri=$(openssl x509 -in $cert -noout -ocsp_uri)
    # 提取中间证书(假设证书链中第2个为中间证书)
    intermediate=$(openssl x509 -in $cert -noout -issuer_hash | xargs -I {} find /etc/ssl/certs -name "{}*.pem")
    # 执行OCSP查询
    openssl ocsp -issuer $intermediate -cert $cert -url $ocsp_uri -CAfile /etc/ssl/certs/ca-certificates.crt -text | grep -E "good|revoked"
    echo -e "\n"
done < cert_list.txt

2. 结合定时任务自动核查

在 Linux 系统中,通过crontab设置定时任务,每日自动核查证书状态并发送告警邮件:

# 编辑定时任务(每天凌晨2点执行脚本)
crontab -e
# 添加以下内容
0 2 * * * /root/scripts/check_ssl_revocation.sh | mail -s "SSL证书吊销状态核查报告" admin@example.com

六、常见问题与注意事项

1. OCSP 查询失败的解决方案

(1)“Response verify failed” 错误

原因:根证书未正确指定,需从证书链中提取完整根证书,或使用系统默认根证书库(Linux 路径:/etc/ssl/certs/ca-certificates.crt)。

(2)OCSP 服务器超时

原因:网络防火墙拦截 OCSP 请求(默认端口为 80 或 443),需开放对 CA 的 OCSP 服务器 IP 的访问权限;或改用 CRL 方法查询。

2. CRL 更新延迟问题

CRL 的更新周期通常为 12-24 小时,若证书刚被吊销,可能未及时同步到 CRL 列表,此时需优先使用 OCSP 查询(实时性更高)。

3. 证书格式转换

若证书格式为 DER(二进制),需先转换为 PEM 格式才能解析:

# DER格式转换为PEM格式
openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM

七、替代工具推荐:可视化与简化操作

若觉得命令行操作复杂,可使用以下工具简化核查流程:

1. 在线工具SSL Labs(https://www.ssllabs.com/ssltest/),输入域名即可查看证书状态(包括吊销信息);

2. 图形化工具:Windows 的 “证书管理器”(certmgr.msc),导入证书后可查看 “吊销状态”;macOS 的 “钥匙串访问”,双击证书查看 “信任” 选项中的状态;

3. API 接口:阿里云、腾讯云等云服务商提供SSL证书管理 API,可通过 API 批量查询证书吊销状态(适合企业级场景)。

SSL证书吊销状态核查是网络安全的重要环节,OpenSSL 通过 OCSP 和 CRL 两种机制,为技术人员提供了灵活、高效的核查工具。在实际应用中,建议优先使用 OCSP 协议(实时性强),结合自动化脚本实现定期核查,同时关注 CA 发布的安全公告,及时处理吊销证书,避免因证书失效导致的安全风险与业务损失。


Dogssl.cn拥有20年网络安全服务经验,提供构涵盖国际CA机构SectigoDigicertGeoTrustGlobalSign,以及国内CA机构CFCA沃通vTrus上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!
相关文档
立即加入,让您的品牌更加安全可靠!
申请SSL证书
0.154375s