bg-blog-articles

如何使用 OpenSSL 检查证书

如果你管理着一个网站或服务器,定期检查你的 SSL/TLS 证书是一项绝对不能省略的任务。证书过期或配置错误会导致浏览器警告、信任破坏,以及潜在的停机风险。

How to Check a Certificate With OpenSSL

OpenSSL —— 这款开源命令行工具几乎预装在每个 Linux 发行版、macOS 系统中,Windows 上也可以使用,让你能够直接、无过滤地访问证书详情。无需浏览器,无需第三方工具,只需一个终端和几条简短的命令。

本指南涵盖了你最常用的 OpenSSL 命令:查看证书详情、检查到期日期、检测远程服务器、验证证书链,以及确认私钥与证书是否匹配。每条命令都可直接复制粘贴使用,并附有清晰的功能说明。

更喜欢在浏览器中操作? SSL Checker 能返回同样的证书详情:证书链、到期时间、加密套件以及安全评级,只需输入域名即可,无需终端;你也可以直接在 Chrome、Firefox、Safari 或 Edge 中查看证书。本指南则涵盖了所有你更愿意在命令行中完成的操作。


目录

  1. 前提条件:检查你的 OpenSSL 版本
  2. 使用 openssl x509 查看完整证书详情
  3. 使用 openssl s_client 检查远程服务器证书
  4. 验证证书到期日期
  5. 使用 openssl verify 验证证书链
  6. 确认私钥与证书是否匹配
  7. 在不同证书格式间转换
  8. 排查常见证书错误
  9. 掌控好你的证书

今天从 SSL Dragon 订购 SSL 证书,可节省 10% 的费用!

快速发行、强大加密、99.99% 的浏览器信任度、专业支持和 25 天退款保证。优惠券代码SAVE10

龙飞行的详细图像

前提条件:检查你的 OpenSSL 版本

在运行任何命令之前,先确认 OpenSSL 已经安装,并检查你所使用的版本。你的版本决定了可用的协议和算法。

openssl version –a

这条命令会输出版本号、发布日期,以及默认证书目录(OPENSSLDIR)。大多数 Linux 系统都预装了 OpenSSL。在 macOS 上,系统自带的是 LibreSSL(OpenSSL 的一个分支),它能处理相同的命令。

如果你使用的是 Windows,可以通过 WSL(Windows Subsystem for Linux)、Git Bash,或独立的 Windows 版本来使用 OpenSSL。

提示: 请确保你运行的是 OpenSSL 1.1.1 或更高版本。较旧的版本不支持 TLS 1.2 和 TLS 1.3,而这两者是现代服务器和浏览器所必需的。


使用 openssl x509 查看完整证书详情

openssl x509 命令是证书检查的核心工具。它能读取 X.509 证书——所有 SSL/TLS 证书使用的标准格式——并以易读的形式输出详细信息。

要查看本地存储证书文件的完整详情:

openssl x509 -in certificate.crt -text -noout

以下是每个参数的作用:

  • -in certificate.crt —— 指定输入的证书文件。请替换为你实际的文件名(例如 yourdomain.crt 或 server.pem)。
  • -text —— 以可读文本格式输出证书内容,而非原始编码数据。
  • -noout —— 阻止 OpenSSL 在文本输出旁再打印 Base64 编码的 PEM 区块。

此命令会揭示证书的一切信息:

  • 扩展项 —— 包括主题备用名称(SAN)、密钥用途(Key Usage)以及权威机构信息访问(Authority Information Access)。
  • 颁发者 —— 签发该证书的证书颁发机构(CA)(例如 DigiCert、Let’s Encrypt、Sectigo)。
  • 主题 —— 证书所颁发给的域名或组织。
  • 有效期 —— “Not Before”和“Not After”日期,显示证书的有效时间段。
  • 公钥算法与长度 —— 通常为 RSA 2048 位或 ECDSA P-256。
  • 签名算法 —— 现代证书通常为 sha256WithRSAEncryption。

仅检查颁发者或主题

如果你不需要完整输出,可以只获取特定字段:

openssl x509 -in certificate.crt -noout -issuer
openssl x509 -in certificate.crt -noout -subject

这些单行命令在编写脚本或只需快速确认时非常有用。

注意: OpenSSL 默认使用 PEM 格式 —— 这是以 —–BEGIN CERTIFICATE—– 开头的文本文件。如果你的证书是 DER 格式(二进制),请添加 -inform der 参数:

openssl x509 -in certificate.der -inform der -text -noout

使用 openssl s_client 检查远程服务器证书

你并不总是能在本地机器上拿到证书文件。很多时候,你需要检查安装在正在运行的服务器上的证书。这时就轮到 openssl s_client 上场了。

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

此命令会在端口 443(HTTPS 的默认端口)上与服务器建立 TLS 连接,并显示证书链、协议版本、加密套件以及会话详情。

-servername 参数启用了 服务器名称指示(SNI),当服务器在同一个 IP 地址上托管多个域名时,这一点至关重要。如果不使用它,你可能会收到错误的证书。

查看完输出后,按 CTRL+C 关闭连接。

手边没有终端,或者想要更快捷的方式?我们的 SSL Checker 让你可以 无需 OpenSSL 即可检查证书。只需粘贴域名,即可在浏览器中获取证书链、到期时间和加密套件详情。

通过管道获取更清晰的输出

s_client 的原始输出内容较为冗长。若要仅提取证书详情,可将其通过管道传给 openssl x509:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -text

开头的 echo | 发送一个空输入,使连接自动关闭。2>/dev/null 用来屏蔽错误信息,让你获得干净的输出。

你还可以进一步缩小范围,只查看特定字段:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

这条单行命令是系统管理员的实用首选,它能一次性显示颁发者、主题以及有效期。

将证书保存到本地

如果你想将远程证书保存为文件以便进一步分析:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 > yourdomain.pem

现在你可以针对保存的文件运行任何 openssl x509 命令了。


验证证书到期日期

证书过期是最常见的 SSL 错误原因之一。OpenSSL 提供了多种方法来检查到期时间。

快速日期检查

openssl x509 -in certificate.crt -noout -dates

此命令会同时输出“Not Before”(起始日期)和“Not After”(结束日期)。如果你只需要到期日期:

openssl x509 -in certificate.crt -noout -enddate

针对远程服务器

结合 s_client 和 x509,即可检查在线服务器证书的到期时间:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -enddate

使用 -checkend 自动化到期提醒

-checkend 参数是大多数教程都会忽略的功能,但它在自动化场景中非常实用。它会检查证书是否会在指定的秒数内过期,并返回一个退出代码:

openssl x509 -in certificate.crt -noout -checkend 2592000

数值 2592000 相当于 30 天的秒数。如果证书将在 30 天内过期,该命令会返回一个非零退出代码并打印警告信息。如果证书在该时间窗口之外仍然有效,则返回 0。

这使得它很容易集成到 cron 定时任务、监控脚本或 CI/CD 流水线中:

if ! openssl x509 -in certificate.crt -noout -checkend 2592000 > /dev/null 2>&1; then
    echo "WARNING: Certificate expires within 30 days!"
fi

为什么这很重要:随着 CA/浏览器论坛推动到 2029 年将证书有效期缩短至 47 天,自动化的到期监控已不再是可有可无的选项,而是一项必需品。现在就将这些检查机制构建到你的基础设施中,能让你日后免于遭受服务中断之苦。


使用 openssl verify 验证证书链

证书并非孤立运作。浏览器和客户端会验证整个证书链,这是一个从你的服务器证书开始,经过一个或多个中间 CA 证书,最终到达受信任的根 CA 证书的序列。

如果证书链断裂或不完整,即使证书本身有效,访问者也会看到“不受信任”的错误提示。

要根据系统受信任的 CA 存储验证证书:

openssl verify certificate.crt

如果输出 certificate.crt: OK,则说明证书链完整且有效。

当中间证书是独立文件时

如果你的中间 CA 证书位于独立文件中(这在许多 CA 提供商,包括 DigiCert 中很常见),请使用 -untrusted 参数:

openssl verify -untrusted intermediate.crt certificate.crt

-untrusted 参数告诉 OpenSSL 在构建证书链时使用提供的中间证书,而不会将其永久添加到信任存储中。

查看远程服务器的完整证书链

要查看在线服务器证书链中的每一个证书:

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -showcerts

-showcerts 参数会以 PEM 格式输出证书链中的每一个证书。这是诊断证书链问题(例如中间证书缺失或顺序错误)的首选命令。

更喜欢可视化的一键检测方式?我们的 SSL Checker 可以为任意域名 验证证书链 ,并自动标记缺失的中间证书。


确认私钥与证书是否匹配

安装证书后,最常见的错误之一就是私钥不匹配。如果私钥与证书的公钥不对应,Web 服务器将无法启动(或提供的连接会出现故障)。

以下是验证匹配的方法。两条命令都会提取模数(一个共享的数学值)并对其进行哈希处理:

openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privatekey.key | openssl md5

如果 MD5 哈希值完全相同,说明私钥和证书是有效配对的。如果两者不同,则说明出了问题——可能是密钥错误,或者证书是用新的密钥对重新签发的。

你还可以将此检查扩展到你的CSR(证书签名请求):

openssl req -noout -modulus -in request.csr | openssl md5

模数检查能告诉你这三份文件是否互相匹配,但不能告诉你 CSR 本身声明了哪些内容。若要读取其自身字段,请运行 openssl req -in yourCSR.csr -noout -text,或将请求粘贴到我们的 CSR 解码器中。

证书、私钥和 CSR 这三者应当返回相同的哈希值。

手边没有装有 OpenSSL 的机器?我们的 证书密钥匹配器 能在你的浏览器中完成同样的比对,甚至适用于模数检查会失效的 ECDSA 密钥。


在不同证书格式间转换

不同的服务器和平台需要不同的证书格式。Apache 和 Nginx 使用 PEM,而 Windows IIS 和 Tomcat 通常需要 PKCS#12(.pfx)。以下是最常见的几种转换方式:

DER 转 PEM:

openssl x509 -inform der -in certificate.der -out certificate.pem

PEM 转 DER:

openssl x509 -outform der -in certificate.pem -out certificate.der

PEM 转 PKCS#12(.pfx):

openssl pkcs12 -export -out certificate.pfx -inkey privatekey.key -in certificate.crt -certfile ca-bundle.crt

PKCS#12 转 PEM:

openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes

-nodes 参数会导出未经密码加密的私钥。如果你希望输出的内容受密码短语保护,请移除该参数。

小贴士: 带有 .crt、.cer 和 .pem 扩展名的证书文件都可能是 PEM 格式。仅凭扩展名无法判断编码方式,需要检查文件内容。如果它以 —–BEGIN 开头,那就是 PEM 格式;如果是一堆二进制乱码,那就是 DER 格式。

如果你在没有 OpenSSL 的机器上需要进行一次性转换, SSL Converter 可以在浏览器中处理 PEM、DER、PFX 和 P7B 格式,并能将 PFX 拆分为证书、证书链和密钥。


排查常见证书错误

当出现问题时,OpenSSL 的输出通常能告诉你问题所在。以下是最常见问题的快速参考:

“unable to get local issuer certificate”。证书链不完整。你的服务器配置中缺少中间证书。请从证书提供商处获取正确的 CA 证书包,并将其与服务器证书一起配置。

“certificate has expired”。顾名思义,证书的“Not After”日期已经过去。请立即续订并替换它。

“certificate signature failure”。证书在签发后被修改或损坏。请从你的 CA 提供商处重新下载,或重新签发证书。

“key values mismatch”。私钥与证书不对应。请运行前文提到的模数比对来确认,然后找到正确的密钥,或生成新的 CSR。

“self-signed certificate”。OpenSSL 无法将该证书追溯至受信任的根 CA。对于开发环境中使用的自签名证书而言,这是正常现象。而对于生产环境,请确保你使用的是由公开受信任的证书颁发机构签发的证书。

“hostname mismatch”。你所连接的域名与证书中列出的通用名称(CN)或主题备用名称(SAN)不一致。可通过以下命令检查 SAN:

openssl x509 -in certificate.crt -noout -ext subjectAltName

掌控好你的证书

使用 OpenSSL 检查证书是你在整个证书生命周期中会反复进行的操作——在安装期间、续订之后,以及每当出现问题时。这些命令是诊断问题、验证一切配置正确的最快方式。

如果你想快速检测而不打开终端,可以将域名输入我们的 SSL Checker,几秒钟内即可获得 SSL 安全评级 ,以及完整的证书、证书链和加密套件明细。

但手动检查的可扩展性终究有限。如果你要在不同服务器上管理多个证书,你需要建立一套可靠的证书管理流程——尤其是随着证书有效期不断缩短,容错空间也在不断变小。

需要值得信赖的 SSL 证书? SSL Dragon 提供来自 DigiCert、Sectigo、Thawte 等顶级证书颁发机构的丰富 SSL/TLS 证书选择,价格具有竞争力,签发速度快,并配有专属支持服务。无论你需要单域名证书还是企业级多域名解决方案,都能在这里找到合适的选择。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.