验证证书链

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

<ph type="x-smartling-placeholder">

本文档介绍了如何在将证书上传到 密钥存储区或信任库该流程依赖于 使用 OpenSSL 工具包验证证书 链,适用于任何提供 OpenSSL 的环境。

准备工作

在使用本文档中的步骤之前,请确保您了解以下主题:

  • 如果您不熟悉证书链,请参阅 信任链
  • 如果您对 OpenSSL 库不熟悉,请参阅 OpenSSL
  • 如果您想使用本指南中的命令行示例,请安装或更新到 最新版本的 OpenSSL 客户端。
  • 确保证书采用 PEM 格式。如果证书未采用 PEM 格式 请按照 <ph type="x-smartling-placeholder"></ph> 将证书转换为支持的格式,以将其转换为 PEM 格式。

验证整个证书链的证书主题和颁发者

要使用 OpenSSL 命令验证证书链,请完成 以下部分:

拆分证书链

在验证证书之前,您需要将证书链拆分为单独的 申请证书:

  1. 登录存在 OpenSSL 客户端的服务器。
  2. 将证书链拆分为以下证书(如果尚未拆分):
    • 实体证书entity.pem
    • 中间证书intermediate.pem
    • 根证书root.pem
<ph type="x-smartling-placeholder">

下图显示了一个证书链示例:

证书链流程:从身份证书到中间证书再到根证书

验证证书主题和颁发者

本部分介绍了如何获取证书的主题和颁发者,并验证 您具有有效的证书链。

  1. 运行以下 OpenSSL 命令以获取 Subject 和 为来自 entity 的链中的每个证书创建 Issuer root 并验证它们是否形成了适当的证书链:
    openssl x509 -text -in certificate | grep -E '(Subject|Issuer):'
        

    其中,certificate 是证书的名称。

  2. 验证证书链中的证书是否遵循以下准则: <ph type="x-smartling-placeholder">
      </ph>
    • Subject每个证书的Issuer 链中的上一个证书(Entity 证书除外)。
    • 对于根证书,SubjectIssuer 相同。

    如果证书链中的证书符合这些准则,我们就会认为该证书链完整且有效。

    证书链验证示例

    以下示例是包含三个证书的示例证书链的 OpenSSL 命令输出:

    实体证书

    openssl x509 -text -in entity.pem | grep -E '(Subject|Issuer):'
    
    Issuer: C = US, O = Google Trust Services, CN = GTS CA 1O1
    Subject: C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.enterprise.apigee.com
            

    中间证书

    openssl x509 -text -in intermediate.pem  | grep -E '(Subject|Issuer):'
    
    Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
    Subject: C = US, O = Google Trust Services, CN = GTS CA 1O1
            

    根证书

    openssl x509 -text -in root.pem | grep -E '(Subject|Issuer):'
    
    Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
    Subject: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
            

    在上述示例中,请注意以下事项:

    • 中间证书的 SubjectIssuer 匹配 该实体证书的签名。
    • 根证书的 Subject 与以下证书的 Issuer 相匹配: 中间证书
    • SubjectIssuer 在根证书中相同。

    在上面的示例中,您可以确认示例证书链有效。

验证证书主题和颁发者哈希

本部分介绍了如何获取证书的主题和颁发者的哈希值,以及 验证您是否有有效的证书链。

最好是验证证书的哈希序列 识别问题,例如证书的公用名 (CN) 包含多余的空间,或 特殊字符。

  1. 运行以下 OpenSSL 命令以获取每个命令的 hash 序列 从 entityroot 的链中的证书,并验证它们是否 形成适当的证书链
  2. openssl x509 -hash -issuer_hash -noout -in certificate
        

    其中,certificate 是证书的名称。

  3. 验证证书链中的证书是否遵循以下准则:
    • 每个证书的“Subject”与上述“Issuer”匹配 证书链中的证书(Entity 证书除外)。
    • 对于根证书,SubjectIssuer 相同。

    如果证书链中的证书符合这些准则, 视为完整有效。

    通过哈希序列验证证书链的示例

    以下示例是示例证书链的 OpenSSL 命令输出 包含以下三个证书:

    openssl x509 -in entity.pem -hash -issuer_hash -noout
    c54c66ba #this is subject hash
    99bdd351 #this is issuer hash
        
    openssl x509 -in intermediate.pem -hash -issuer_hash -noout
    99bdd351
    4a6481c9
        
    openssl x509 -in root.pem -hash -issuer_hash -noout
    4a6481c9
    4a6481c9
        

    在上述示例中,请注意以下事项:

    • 中间证书的 subject hash 与实体的 issuer hash 匹配 证书。
    • 根证书的 subject hash 与颁发者证书的 issuer hash 匹配。
    • subjectissuer hash 在根证书中相同。

    在上面的示例中,您可以确认示例证书链有效。

验证证书有效期

本部分介绍了如何验证链中的所有证书是否均 过期日期:

  • 获取证书的开始日期和结束日期。
  • 获取过期状态。

开始日期和结束日期

运行以下 OpenSSL 命令以获取每个证书的开始日期和结束日期 从 entityroot 的链中,并验证所有证书是否 链均有效(开始日期早于今天),且未过期。

从开始日期和结束日期到证书失效日期的验证示例

openssl x509 -startdate -enddate -noout -in entity.pem
notBefore=Feb  6 21:57:21 2020 GMT
notAfter=Feb  4 21:57:21 2021 GMT
openssl x509 -startdate -enddate -noout -in intermediate.pem
notBefore=Jun 15 00:00:42 2017 GMT
notAfter=Dec 15 00:00:42 2021 GMT
openssl x509 -startdate -enddate -noout -in root.pem
notBefore=Apr 13 10:00:00 2011 GMT
notAfter=Apr 13 10:00:00 2022 GMT

到期状态

运行以下 OpenSSL 命令以检查证书是否已经过期,或者 将于下一个 N seconds后过期。这会返回 当前系统日期上下文中的证书。

openssl x509 -checkend <N Seconds> -noout -in certificate

其中,certificate 是证书的名称。

通过 checkend 选项验证证书失效日期的示例

以下命令使用 0 seconds 检查证书是否已读取 已过期或未过期:

openssl x509 -checkend 0 -noout -in entity.pem
Certificate will not expire
openssl x509 -checkend 0 -noout -in intermediate.pem
Certificate will not expire
openssl x509 -checkend 0 -noout -in root.pem
Certificate will not expire

在此示例中,消息 Certificate will not expire 表示 证书尚未过期。

<ph type="x-smartling-placeholder">