OpenSSL 查看证书有效期、颁发者等信息(附命令) (明确查看内容) – wiki基地

OpenSSL 证书信息查看指南:有效期、颁发者及更多

在数字证书的世界里,OpenSSL 扮演着举足轻重的角色。它不仅仅是一个强大的加密工具包,更是一个不可或缺的证书管理工具。无论是网站管理员、系统管理员,还是安全工程师,都需要经常与数字证书打交道,而 OpenSSL 正是帮助我们理解和管理这些证书的利器。

本文将深入探讨如何使用 OpenSSL 命令行工具来查看证书的各种关键信息,包括有效期、颁发者、使用者、公钥、扩展信息等。通过详细的命令示例和解释,您将能够轻松掌握 OpenSSL 在证书信息查看方面的强大功能。

一、 OpenSSL 简介与安装

OpenSSL 是一个开源的、全功能的、健壮的、商业级的工具包,实现了安全套接字层(SSL)和传输层安全(TLS)协议以及一个通用的加密库。它由 Eric A. Young 和 Tim J. Hudson 开发,并由 OpenSSL 项目团队维护。

安装 OpenSSL:

大多数 Linux 发行版都预装了 OpenSSL。如果没有,您可以使用包管理器安装:

  • Debian/Ubuntu:

    bash
    sudo apt-get update
    sudo apt-get install openssl

  • CentOS/RHEL/Fedora:

    bash
    sudo yum install openssl

  • macOS:

    通常 macOS 也预装了 OpenSSL,但可能不是最新版本。建议使用 Homebrew 安装:

    bash
    brew install openssl

  • Windows:

    您可以从 OpenSSL 官方网站或第三方源下载预编译的二进制文件,或者使用 Chocolatey 包管理器:

    powershell
    choco install openssl

安装完成后,您可以通过运行以下命令来验证 OpenSSL 是否已正确安装以及查看版本信息:

bash
openssl version

二、 证书格式与类型

在深入了解 OpenSSL 命令之前,我们需要先了解一些常见的证书格式和类型:

  • PEM (Privacy Enhanced Mail): 这是最常见的证书格式。它通常以 .pem, .crt, .cer, 或 .key 为扩展名。PEM 格式是 Base64 编码的 ASCII 文本文件,包含 “—–BEGIN CERTIFICATE—–” 和 “—–END CERTIFICATE—–” 标记。

  • DER (Distinguished Encoding Rules): 这是证书的二进制格式。它通常以 .der.cer 为扩展名。

  • PKCS#7 (Public-Key Cryptography Standards #7): 这种格式可以包含多个证书,通常用于证书链。它通常以 .p7b.p7c 为扩展名。

  • PKCS#12 (Public-Key Cryptography Standards #12): 这种格式通常包含证书和私钥,并用密码保护。它通常以 .pfx.p12 为扩展名。

三、 使用 OpenSSL 查看证书信息

OpenSSL 提供了 x509 子命令来处理 X.509 证书,这是最常见的证书类型。我们将使用 x509 子命令来查看证书的各种信息。

1. 查看证书基本信息(文本格式)

最常用的命令是:

bash
openssl x509 -in certificate.crt -text -noout

  • -in certificate.crt: 指定要查看的证书文件。将 certificate.crt 替换为您的证书文件名。
  • -text: 以文本格式输出证书信息。
  • -noout: 不输出证书的 Base64 编码版本。

这个命令将输出证书的详细信息,包括:

  • Version (版本): X.509 证书的版本号。
  • Serial Number (序列号): 证书颁发者分配给证书的唯一标识符。
  • Signature Algorithm (签名算法): 用于对证书进行签名的算法(例如,sha256WithRSAEncryption)。
  • Issuer (颁发者): 颁发证书的实体的信息,包括:
    • C (Country): 国家代码。
    • ST (State or Province): 州或省。
    • L (Locality): 地区或城市。
    • O (Organization): 组织名称。
    • OU (Organizational Unit): 组织单位名称。
    • CN (Common Name): 通常是证书颁发机构的域名或名称。
  • Validity (有效期): 证书的生效日期和失效日期。
    • Not Before: 证书生效的起始日期和时间。
    • Not After: 证书失效的日期和时间。
  • Subject (使用者/主体): 证书所标识的实体的信息,字段与颁发者类似,但 CN 通常是网站的域名或服务器的名称。
  • Subject Public Key Info (使用者公钥信息):
    • Public Key Algorithm: 公钥算法(例如,RSA)。
    • RSA Public-Key: 公钥的参数(例如,模数和指数)。
  • X509v3 extensions (X.509v3 扩展): 包含各种扩展信息,例如:
    • X509v3 Key Usage: 定义证书可以用于哪些目的(例如,数字签名、密钥加密)。
    • X509v3 Extended Key Usage: 更详细地指定证书的用途(例如,服务器身份验证、客户端身份验证)。
    • X509v3 Basic Constraints: 指示证书是否为 CA 证书以及路径长度限制。
    • X509v3 Subject Alternative Name: 包含证书的其他标识信息,例如 DNS 名称、IP 地址等。
    • Authority Information Access: 授权信息访问,可以获取到上一级证书
    • CRL Distribution Points: 证书吊销列表
    • X509v3 Certificate Policies: 证书策略
  • Signature (签名): 证书颁发者使用其私钥对证书进行的数字签名。

2. 查看特定字段

如果您只对证书的某个特定字段感兴趣,可以使用以下选项:

  • -subject: 显示使用者(主体)信息。

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

  • -issuer: 显示颁发者信息。

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

  • -startdate: 显示证书的生效日期。

    bash
    openssl x509 -in certificate.crt -startdate -noout

  • -enddate: 显示证书的失效日期。

    bash
    openssl x509 -in certificate.crt -enddate -noout

  • -dates: 同时显示生效和失效日期。
    bash
    openssl x509 -in certificate.crt -dates -noout

  • -serial: 显示证书的序列号。

    bash
    openssl x509 -in certificate.crt -serial -noout

    * -fingerprint : 显示证书指纹
    bash
    openssl x509 -in certificate.crt -fingerprint -noout

    * -purpose : 显示证书用途
    bash
    openssl x509 -in certificate.crt -purpose -noout

  • -pubkey: 显示证书的公钥。

    bash
    openssl x509 -in certificate.crt -pubkey -noout

    注意: -pubkey 选项输出的是原始的公钥信息,不是 PEM 格式的。要获取 PEM 格式的公钥,可以这样做:

    bash
    openssl x509 -in certificate.crt -pubkey -noout | openssl rsa -pubin -outform PEM

  • -email: 显示证书中的电子邮件地址(如果有)。

    bash
    openssl x509 -in certificate.crt -email -noout

  • -ocsp_uri:显示 OCSP 地址
    bash
    openssl x509 -in certificate.crt -ocsp_uri -noout

  • -noout: 这个选项在上述所有命令中都使用,表示不输出证书的 Base64 编码版本。

3. 检查证书是否过期

您可以使用以下命令快速检查证书是否已过期:

bash
openssl x509 -in certificate.crt -checkend 0 -noout

  • -checkend 0: 检查当前时间是否在证书的有效期内。如果证书已过期,命令将返回非零退出代码;如果证书仍然有效,将返回零退出代码。 你可以设置一个大于 0 的数字,比如 86400(24 小时,以秒为单位),来检查证书是否会在接下来的 24 小时内过期。

4. 查看证书链

如果您的证书是由中间 CA 颁发的,您可能需要查看整个证书链。可以使用 -text 选项查看证书链中的每个证书的详细信息。 如果证书文件本身就包含了完整的证书链 (例如一些 .pem 文件),openssl x509 -in certificate.crt -text -noout 就会显示整个链。

如果证书链是分开的, 则需要使用以下命令将证书链合并成一个文件:

cat server.crt intermediate.crt root.crt > chain.pem

然后对chain.pem进行查看.

5. 处理不同格式的证书

  • DER 格式:

    如果您有一个 DER 格式的证书,可以使用 -inform DER 选项:

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

  • PKCS#7 格式:

    对于 PKCS#7 格式的证书,可以使用 pkcs7 子命令:

    bash
    openssl pkcs7 -in certificate.p7b -print_certs

    该命令将输出 PKCS#7 文件中包含的所有证书。

  • PKCS#12 格式:
    对于 PKCS#12 格式的证书,可以使用 pkcs12 子命令。 因为 PKCS#12 文件通常包含私钥,所以需要提供密码:

    bash
    openssl pkcs12 -in certificate.pfx -info -nodes

    * -nodes: 不加密私钥。
    如果需要查看证书内容而不需要私钥,则可以使用
    bash
    openssl pkcs12 -in certificate.pfx -info -nokeys

    如果只需要查看私钥,则使用
    bash
    openssl pkcs12 -in certificate.pfx -info -nocerts

四、 进阶应用与常见问题

1. 提取证书中的公钥

前面已经提到了使用 -pubkey 选项,但更常见的做法是将公钥提取到一个单独的文件中:

bash
openssl x509 -in certificate.crt -pubkey -noout > public.key

这将把公钥以原始格式保存到 public.key 文件中。您可以使用以下命令将其转换为 PEM 格式:

bash
openssl rsa -pubin -in public.key -outform PEM -out public.pem

2. 比较两个证书

如果您需要比较两个证书是否相同,可以比较它们的模数(对于 RSA 证书)或序列号:

bash
openssl x509 -in cert1.crt -modulus -noout | openssl md5
openssl x509 -in cert2.crt -modulus -noout | openssl md5

如果两个命令的输出相同,则两个证书的公钥相同。
或者比较序列号:

openssl x509 -in cert1.crt -serial -noout
openssl x509 -in cert2.crt -serial -noout

3. 检查证书吊销状态(CRL 和 OCSP)

  • CRL (Certificate Revocation List):

    OpenSSL 可以下载和检查 CRL。首先,您需要从证书的 “CRL Distribution Points” 扩展中获取 CRL 的 URL。然后使用 openssl crl 命令:

    bash
    openssl crl -inform DER -in crl.der -text -noout

    要检查特定证书是否在 CRL 中,您需要手动检查 CRL 的内容。

  • OCSP (Online Certificate Status Protocol):

    OpenSSL 支持 OCSP 验证。您需要从证书的 “Authority Information Access” 扩展中获取 OCSP 服务器的 URL。然后使用 openssl ocsp 命令:
    bash
    openssl ocsp -issuer issuer.crt -cert certificate.crt -url http://ocsp.example.com -CAfile ca.crt

    * -issuer issuer.crt: 颁发者证书。
    * -cert certificate.crt: 要检查的证书。
    * -url http://ocsp.example.com: OCSP 响应器的 URL。
    * -CAfile ca.crt: 信任的 CA 证书(可选,用于验证 OCSP 响应)。

4. 常见问题与故障排除

  • 证书链不完整: 如果您收到类似 “unable to get local issuer certificate” 的错误,这通常意味着 OpenSSL 无法验证证书的完整链。您需要提供中间 CA 证书,可以使用 -CAfile 选项。

  • 证书已过期: 确保您的系统时间正确,并使用 -checkend 选项检查证书的有效期。

  • 格式错误: 确保您使用了正确的 -inform 选项(如果需要)。

  • 密码保护的证书: 对于 PKCS#12 文件,确保您提供了正确的密码。

五、 总结

OpenSSL 是一个功能强大的工具,可以帮助您查看和管理数字证书。通过本文,您应该已经掌握了以下技能:

  • 安装和验证 OpenSSL。
  • 理解常见的证书格式和类型。
  • 使用 openssl x509 命令查看证书的各种信息,包括有效期、颁发者、使用者、公钥和扩展信息。
  • 使用不同的选项来查看特定字段。
  • 检查证书是否过期。
  • 处理不同格式的证书(DER、PKCS#7、PKCS#12)。
  • 提取证书中的公钥。
  • 比较两个证书。
  • 了解 CRL 和 OCSP 的基本概念。
  • 解决一些常见问题。

通过熟练运用 OpenSSL,您将能够更好地理解和管理数字证书,从而提高您的系统和网络安全水平。 这只是 OpenSSL 的冰山一角,希望本文能帮助您入门 OpenSSL 证书管理。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部