OpenSSL查看证书信息:一步到位获取结果(强调简单易用)

OpenSSL 查看证书信息:一步到位获取结果 (强调简单易用)

在处理 HTTPS、TLS/SSL 等安全协议时,经常需要查看和分析数字证书的信息。OpenSSL 是一个强大的开源工具,提供了丰富的功能来管理和操作证书。本文将重点介绍如何使用 OpenSSL 一步到位极其简单地获取证书的详细信息,避免复杂的命令组合,让即使是初学者也能轻松上手。

核心命令:一招制胜

OpenSSL 提供了多种查看证书信息的命令,但最常用、最直接、最易用的莫过于以下这个:

bash
openssl x509 -in <证书文件路径> -text -noout

命令解析:

  • openssl x509: 这是 OpenSSL 中处理 X.509 证书的子命令。
  • -in <证书文件路径>: 指定要查看的证书文件路径。证书文件通常以 .pem, .crt, .cer 等为后缀。 例子: -in mycert.pem
  • -text: 以人类可读的文本格式输出证书信息。这是关键选项,让信息一目了然。
  • -noout: 不输出证书的编码内容(如 Base64 编码),只显示解析后的文本信息。这使得输出更简洁,避免了不必要的干扰。

使用场景示例:

  1. 查看本地证书文件:

    假设你有一个名为 my_certificate.pem 的本地证书文件,要查看其详细信息,只需执行:

    bash
    openssl x509 -in my_certificate.pem -text -noout

    如果你的证书文件在其它路径,替换 my_certificate.pem

  2. 查看远程服务器证书:
    OpenSSL 也可以直接查看远程服务器使用的证书。 只需要稍微修改一下指令,利用 s_client 子指令。

    bash
    openssl s_client -connect example.com:443 -showcerts 2>/dev/null | openssl x509 -text -noout

    * openssl s_client: 用来建立 SSL/TLS 连接的子指令。
    * -connect example.com:443: 连接到 example.com 的 443 端口(HTTPS 默认端口)。请替换 example.com 为你要查看的实际域名。
    * -showcerts: 显示服务器发送的证书链。
    * 2>/dev/null: 屏蔽掉一些连接过程中的标准错误输出,使结果更清晰。 2> 表示重定向标准错误输出(stderr),/dev/null 是一个特殊的设备文件,写入它的内容会被丢弃。
    * |: 管道符,将 openssl s_client 的输出作为 openssl x509 的输入。

    这条命令会建立到服务器的 HTTPS 连接,获取服务器发送的证书,然后通过管道传递给 openssl x509 命令进行解析和显示。 你会看到服务器证书的详细信息,包括:
    * 颁发者 (Issuer)
    * 使用者/主体 (Subject)
    * 有效期限 (Validity)
    * 公钥信息 (Public Key Info)
    * 扩展信息 (X509v3 Extensions),例如 Subject Alternative Name (SAN) 等
    * 签名算法 (Signature Algorithm)
    * ... 等等

输出结果解读:

openssl x509 -text -noout 命令的输出非常详细,包含了证书的所有关键信息。以下是一些常见字段的解释:

  • Certificate: 证书数据的开始。
  • Data: 证书的具体内容。
  • Version: 证书的版本(通常是 v3)。
  • Serial Number: 证书的序列号,由证书颁发机构 (CA) 分配的唯一标识符。
  • Signature Algorithm: 用于签署证书的算法。
  • Issuer: 证书颁发者的信息,包括国家 (C)、组织 (O)、通用名称 (CN) 等。
  • Validity: 证书的有效期。
    • Not Before: 证书生效的起始时间。
    • Not After: 证书过期的结束时间。
  • Subject: 证书持有者的信息,格式与 Issuer 类似。
  • Subject Public Key Info: 证书持有者的公钥信息。
    • Public Key Algorithm: 公钥使用的算法(例如 RSA, ECC)。
    • RSA Public-Key: (如果是 RSA 算法) 公钥的具体参数,包括模数和指数。
  • X509v3 Extensions: X.509 v3 证书的扩展字段,提供额外的信息。
    • X509v3 Subject Alternative Name (SAN): 主题备用名称,允许证书绑定多个域名或 IP 地址。这是查看证书是否支持多域名的关键字段!
    • X509v3 Key Usage: 指定公钥的用途(例如数字签名、密钥加密等)。
    • X509v3 Extended Key Usage: 指定公钥的扩展用途(例如服务器认证、客户端认证等)。
    • X509v3 Basic Constraints: 指示证书是否是 CA 证书,以及路径长度限制。
    • X509v3 Authority Key Identifier: 颁发者密钥标识符
    • X509v3 Subject Key Identifier: 使用者密钥标识
  • Signature Algorithm: 再次显示用于签署证书的算法。
  • -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----: 这部分是证书的 Base64 编码内容(由于我们使用了-noout,所以不会显示)。

进阶技巧 (可选):

  • 只查看特定字段: 可以结合 grep 命令过滤输出,只显示你关心的字段。例如,只查看证书的有效期:

    bash
    openssl x509 -in my_certificate.pem -text -noout | grep Validity -A 2

    -A 2 表示显示匹配行(Validity)及其后的 2 行(Not Before 和 Not After)。

  • 输出 JSON 格式 (OpenSSL 1.1.1 及更高版本): OpenSSL 1.1.1 及更高版本支持 -json 选项,可以将证书信息输出为 JSON 格式,方便程序处理:

    bash
    openssl x509 -in my_certificate.pem -text -noout -json

总结:

使用 openssl x509 -in <证书文件> -text -noout 命令,可以轻松、快速地查看证书的详细信息。这个命令简单易记,输出结果清晰易懂,是查看和分析证书信息的首选方法。无论是查看本地证书还是远程服务器证书,都能一步到位,获取所需结果。 结合其他命令(如 grep),你可以进一步定制输出,满足更具体的需求。

THE END