您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
本文档介绍如何在将证书上传到 Apigee Edge 中的密钥库或信任库之前验证证书链。该过程依靠 OpenSSL 工具包来验证证书链,适用于任何提供 OpenSSL 的环境。
准备工作
在使用本文档中的步骤之前,请务必了解以下主题:
- 如果您不熟悉证书链,请参阅信任链。
- 如果您不熟悉 OpenSSL 库,请参阅 OpenSSL。
- 如果要使用本指南中的命令行示例,请安装或更新到最新版本的 OpenSSL 客户端。
- 确保证书采用 PEM 格式。如果证书未采用 PEM 格式,请按照 将证书转换为受支持的格式中的说明将其转换为 PEM 格式。
验证完整链的证书主题和颁发者
如需使用 OpenSSL 命令验证证书链,请完成以下部分中所述的步骤:
拆分证书链
在验证证书之前,您需要按照以下步骤将证书链拆分为单独的证书:
- 登录 OpenSSL 客户端所在的服务器。
- 将证书链拆分为以下证书(如果尚未拆分):
-
实体证书:
entity.pem
-
中间证书:
intermediate.pem
-
根证书:
root.pem
下图展示了一个证书链示例:
验证证书主题和颁发者
本部分介绍如何获取证书的主题和颁发者,并验证您是否拥有有效的证书链。
-
运行以下 OpenSSL 命令,获取从
entity
到root
链中每个证书的Subject
和Issuer
,并验证它们是否形成了正确的证书链:openssl x509 -text -in certificate | grep -E '(Subject|Issuer):'
其中 certificate 是证书的名称。
-
验证链中的证书是否遵循了以下准则:
-
每个证书的
Subject
都与链中前一个证书的Issuer
匹配(Entity
证书除外)。 -
根证书的
Subject
和Issuer
是相同的。
如果证书链中的证书符合这些准则,便会被视为完整且有效。
证书链验证示例
以下示例是包含三个证书的示例证书链的 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
在上述示例中,请注意以下几点:
-
中间证书的
Subject
与实体证书的Issuer
匹配。 -
根证书的
Subject
与中间证书的Issuer
匹配。 -
根证书中的
Subject
和Issuer
相同。
从上面的示例中,您可以确认示例证书链是否有效。
-
每个证书的
验证证书主题和颁发者哈希
本部分介绍如何获取证书的主题和颁发者的哈希值,并验证您是否拥有有效的证书链。
验证证书的哈希序列始终是一种很好的做法,因为这有助于发现证书的通用名称 (CN) 包含多余的空格或特殊字符等问题。
- 运行以下 OpenSSL 命令,获取从
entity
到root
链中每个证书的hash
序列,并验证它们是否形成了正确的证书链。 - 验证链中的证书是否遵循以下准则:
-
每个证书的
Subject
都与链中前一个证书的Issuer
匹配(Entity
证书除外)。 -
根证书的
Subject
和Issuer
是相同的。 -
中间证书的
subject hash
与实体证书的issuer hash
匹配。 -
根证书的
subject hash
与颁发者证书的issuer hash
匹配。 -
根证书中的
subject
和issuer hash
相同。
openssl x509 -hash -issuer_hash -noout -in certificate
其中 certificate 是证书的名称。
如果证书链中的证书遵循这些准则,则会被视为完整且有效。
通过哈希序列进行证书链验证的示例
以下示例是包含三个证书的示例证书链的 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
在上述示例中,请注意以下几点:
从上面的示例中,您可以确认示例证书链是否有效。
验证证书是否过期
本部分介绍如何使用以下方法验证链中的所有证书是否都已过期:
- 获取证书的开始日期和结束日期。
- 获取到期状态。
开始日期和结束日期
运行以下 OpenSSL 命令,获取从 entity
到 root
链中每个证书的开始日期和结束日期,并验证链中的所有证书是否有效(开始日期在今天之前)且未过期。
涵盖开始日期和结束日期的证书示例
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
表示证书尚未过期。