6.6. 使用在线证书状态协议(OCSP)响应器
6.6.1. 设置 OCSP 响应程序 复制链接链接已复制到粘贴板!
Red Hat Certificate System 提供两种 CRL 发布方法,供 CA 外部的 OCSP 实例使用:
- 直接 CA→OCSP CRL 发布
- 使用 CA→LDAP 间接发布,然后 OCSP5-4LDAP
默认情况下,当您设置 OCSP 实例后,会自动设置第一个 CRL 发布方法,这将允许直接 CA→OCSP CRL 发布。
第二个发布方法是针对通用标准进行评估。有关设置示例,请参阅 规划、安装和部署指南(通用标准版) 中的 7.4.7 "Configuration for CRL 发布"。
如果您在配置 Online Certificate Status Manager 时在安全域中选择 CA,则不需要额外的步骤来配置 OCSP 服务。CA 的 CRL 发布会自动设置,其签名证书会在在线证书状态管理器的证书数据库中自动添加并可信。但是,如果您选择非安全域 CA,则必须在配置在线证书状态管理器后手动配置 OCSP 服务。
并不是安全域中的每个 CA,在配置 OCSP Manager 时,OCSP Manager 会自动信任 OCSP Manager。在 CA 面板中配置的 CA 的证书链中的每个 CA 都由 OCSP Manager 自动信任。安全域中的其他 CA,但不得在证书链中手动信任。
为安全域之外的证书管理器设置在线证书状态管理器:
- 为将发布到 OCSP 响应器的每个 CA 配置 CRL。
- 启用发布、设置发布程序,并在 OCSP 服务将处理的每个 CA 中设置发布规则(第 7 章 发布证书和 CRL)。如果证书管理器发布到 LDAP 目录,并且将在线证书状态管理器设置为从该目录读取,则不需要此项。
- 证书配置文件必须配置为包含授权信息访问扩展,指向证书管理器侦听 OCSP 服务请求的位置(第 6.6.4 节 “启用证书管理器的内部 OCSP 服务”)。
配置 OCSP 响应器。
- 配置撤销信息存储(第 6.6.2.2 节 “配置撤销信息存储:内部数据库” 和 第 6.6.2.3 节 “配置撤销信息存储:LDAP 目录”)。
- 识别每个发布证书管理器到 OCSP 响应程序(第 6.6.2 节 “将 CA 识别到 OCSP Responder”)。
- 如有必要,为签名 OCSP 签名证书的 CA 配置信任设置(第 13.6 节 “更改 CA 证书的信任设置”)。
- 在配置这两个子系统后重启这两个子系统。
- 验证 CA 是否已正确连接到 OCSP 响应程序(第 6.6.2.1 节 “验证证书管理器和在线证书状态管理器连接”)。
6.6.2. 将 CA 识别到 OCSP Responder 复制链接链接已复制到粘贴板!
在将 CA 配置为将 CRL 发布到在线证书状态管理器之前,必须通过将 CA 签名证书存储在在线证书状态管理器的内部数据库来识别 CA 的证书。证书管理器使用此证书关联的密钥对为 CRL 进行签名;在线证书状态管理器会根据存储的证书验证签名。
如果在配置在线证书状态管理器时选择了安全域中的 CA,则不需要额外的步骤来配置在线证书状态管理器来识别 CA;在在线证书状态管理器的证书数据库中会自动添加 CA 并可信。但是,如果选择了非安全域 CA,则必须在配置在线证书状态管理器后手动将 CA 签名证书添加到证书数据库中。
不需要为 CA 导入证书链,它将将其 CRL 发布到在线证书状态管理器。OCSP 服务需要证书链的唯一时间是,如果 CA 在发布 CRL 时通过 SSL/TLS 身份验证连接到在线证书状态管理器。否则,在线证书状态管理器不需要完整的证书链。
但是,在线证书状态管理器必须在其证书数据库中签署 CRL (CA 签名证书或单独的 CRL 签名证书)。OCSP 服务通过将 CRL 与数据库中的证书进行比较来验证 CRL,而不与证书链。如果 root CA 和其从属 CA 之一发布 CRL 到在线证书状态管理器,则在线证书状态管理器需要两个 CA 的 CA 签名证书。
要导入 CA 或 CRL 签名证书,用来为 CA 发布的证书签名到在线证书状态管理器,请执行以下操作:
- 从 CA 的末尾实体页面中获取证书管理器的 base-64 CA 签名证书。
-
打开在线证书状态管理器代理页面。URL 的格式是
https://hostname:SSLport/ocsp/agent/ocsp。 - 在左侧框中,单击 。
- 在表单中,将编码的 CA 签名证书粘贴到标有 Base 64 编码证书(包括标头和页脚) 的文本区域。
- 要验证证书是否已成功添加,请在左侧框中单击 List Certificate Authorities。
生成的表单应该显示有关新 CA 的信息。此更新、下一步更新 和 Requests Served Since Startup 字段应显示 0 (0)。
6.6.2.1. 验证证书管理器和在线证书状态管理器连接 复制链接链接已复制到粘贴板!
当证书管理器重启时,它会尝试连接到在线证书状态管理器的 SSL/TLS 端口。要验证证书管理器是否确实与在线证书状态管理器通信,请检查 此 更新和 下一步更新,该字段应该使用与在线证书状态管理器最新通信的适当时间戳进行更新。Requests Served Since Startup 字段应该仍然显示 0 (0)的值,因为没有客户端尝试查询 OCSP 服务以获取证书撤销状态。
6.6.2.2. 配置撤销信息存储:内部数据库 复制链接链接已复制到粘贴板!
Online Certificate Status Manager 将每个证书管理器的 CRL 存储在其内部数据库中,并将其用作 CRL 存储来验证证书的撤销状态。要更改在线证书状态管理器用来在其内部数据库中存储 CRL 的配置:
打开在线证书状态管理器控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ocsp注意pkiconsole已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。
右侧窗格显示在线证书状态管理器可以使用的两个存储库;默认情况下,它会在其内部数据库中使用 CRL。
-
选择
defStore,然后单击 。 编辑
defStore值。
- notFoundAsGood.如果在任何 CRL 中找不到相关的证书,则将 OCSP 服务设置为返回 GOOD 的 OCSP 响应。如果未选中此项,响应为 UNKNOWN,当客户端遇到时,会导致错误消息。
-
byName。OCSP Responder 只支持基本响应类型,其中包括 OCSP Responder 发出响应的 ID。基本响应类型中的 ResponderID 字段由
ocsp.store.defStore.byName参数的值决定。如果byName参数为 true 或缺失,则 OCSP 颁发机构签名证书主题名称将用作 OCSP 响应的 ResponderID 字段。如果byName参数为 false,则 OCSP 颁发机构签名证书哈希将是 OCSP 响应的 ResponderID 字段。 - includeNextUpdate.包括下一个 CRL 更新时间的时间戳。
6.6.2.3. 配置撤销信息存储:LDAP 目录 复制链接链接已复制到粘贴板!
虽然 OCSP Manager 默认在其内部数据库中存储 CA CRL,但您可以将它配置为使用发布到 LDAP 目录的 CRL。
当将 OCSP 管理器配置为使用 LDAP 目录时,您需要禁用默认的直接 CA→OCSP CRL 发布方法。为此,请参阅 规划、安装和部署指南(通用标准版本) 中的 9.2.3.17 "Disabling the direct CA-OCSP CRL 发布"。
默认情况下,如果启用了 ldapStore 方法,则 OCSP 用户界面不会检查证书状态。但是,OCSP 子系统可以利用频繁更新的 CRL 来验证其对等的证书,而无需访问另一个 OCSP 系统。为此,请参阅 规划、安装和部署指南(Common criteria Edition) 中的 OCSP 中使用最新的 CRL"启用客户端证书验证。
将在线证书状态管理器配置为使用 LDAP 目录:
打开在线证书状态管理器控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ocsp注意pkiconsole已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。
右侧窗格显示在线证书状态管理器可以使用的两个存储库;默认情况下,它会在其内部数据库中使用 CRL。
-
要在 LDAP 目录中使用 CRL,点 来启用
ldapStore选项。 -
选择
ldapStore,然后单击 。 设置
ldapStore参数。
- numConns.OCSP 服务应检查的 LDAP 目录总数。默认情况下,设置为 0。设置此值会显示相应的 主机、port、baseDN 和 refreshInSec 字段的数量。
- 主机.LDAP 目录的完全限定域名。
- 端口.LDAP 目录的非 SSL/TLS 端口。
-
baseDN.开始搜索 CRL 的 DN。例如,
O=example.com。 - refreshInSec.连接被刷新的频率。默认值为 86400 秒(每天)。
-
caCertAttr.保留默认值
cACertificate;binary,因为它为。它是证书管理器发布其 CA 签名证书的属性。 -
crlAttr.保留默认值
certificateRevocationList;binary,因为它为。它是证书管理器发布 CRL 的属性。 - notFoundAsGood.如果在任何 CRL 中找不到相关的证书,则将 OCSP 服务设置为返回 GOOD 的 OCSP 响应。如果未选中此项,响应为 UNKNOWN,当客户端遇到时,会导致错误消息。
-
byName。OCSP Responder 只支持基本响应类型,其中包括 OCSP Responder 发出响应的 ID。基本响应类型中的 ResponderID 字段由
ocsp.store.defStore.byName参数的值决定。如果byName参数为 true 或缺失,则 OCSP 颁发机构签名证书主题名称将用作 OCSP 响应的 ResponderID 字段。如果byName参数为 false,则 OCSP 颁发机构签名证书哈希将是 OCSP 响应的 ResponderID 字段。 - includeNextUpdate.在线证书状态管理器可包含下一个 CRL 更新时间的时间戳。
6.6.2.4. 配置默认的 OCSP 响应签名算法 复制链接链接已复制到粘贴板!
将在线证书状态管理器配置为使用不同的 OCSP 响应签名算法:
打开在线证书状态管理器控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ocsp注意pkiconsole已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。- 在 Configuration 选项卡中,选择 Online Certificate Status Manager。
在 General Settings 中,从下拉列表中选择所需的签名算法。例如,带有
RSA 的 SHA384。注意不再支持 SHA1 算法。
6.6.2.5. 测试 OCSP 服务设置 复制链接链接已复制到粘贴板!
通过执行以下操作测试证书管理器是否可以正确服务 OCSP 请求:
- 在浏览器或客户端中打开撤销检查。
- 从为 OCSP 服务启用的 CA 请求证书。
- 批准请求。
- 将证书下载到浏览器或客户端。
- 确保 CA 由浏览器或客户端信任。
检查证书管理器的内部 OCSP 服务的状态。
打开 CA 代理服务页面,然后选择 OCSP Services 链接。
测试独立的在线证书状态管理器子系统。
打开在线证书状态管理器代理服务页面,然后单击 List Certificate Authorities 链接。
该页面应当显示有关配置为向在线证书状态管理器发布 CRL 的证书管理器的信息。该页面还总结了自上次启动后的在线证书状态管理器的活动。
- 吊销证书。
- 在浏览器或客户端中验证证书。服务器应返回证书已被撤销。
再次检查证书管理器的 OCSP-service 状态,以验证是否已发生这些问题:
- 浏览器向证书管理器发送 OCSP 查询。
- 证书管理器向浏览器发送 OCSP 响应。
- 此浏览器用于验证证书并返回其状态,导致无法验证证书。
再次检查独立的 OCSP 服务子系统,以验证是否发生这些因素:
- 证书管理器将 CRL 发布到在线证书状态管理器。
- 浏览器向在线证书状态管理器发送 OCSP 响应。
- 在线证书状态管理器向浏览器发送 OCSP 响应。
- 此浏览器用于验证证书并返回其状态,导致无法验证证书。
6.6.3. 为错误的序列号设置响应 复制链接链接已复制到粘贴板!
OCSP 响应者在确定证书是否有效前检查证书的吊销状态和过期日期;默认情况下,OCSP 不会验证证书的附加信息。
notFoundAsGood 参数设置 OCSP 如何处理带有无效序列号的证书。默认启用此参数,这意味着如果证书有错误的序列号,但证书有效,但 OCSP 会为证书返回 GOOD 状态。
要使 OCSP 检查和拒绝基于错误的序列号和撤销状态的证书,请更改 notFoundAsGood 设置。在这种情况下,OCSP 状态返回带有错误序列号的证书。客户端将其解释为错误,并可相应地响应。
打开在线证书状态管理器控制台。
# pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:8443/ocsp注意pkiconsole已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然pkiconsole在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与pkiconsole等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。
-
选择
defStore,然后单击 。 编辑
notFoundAsGood值。选择该复选框意味着 OCSP 将返回GOOD值,即使证书上的序列号不正确。取消选择复选框意味着 OCSP 发送值UNKNOWN,客户端可以理解为错误。
重启 OCSP Manager。
# pki-server restart instance-name
6.6.4. 启用证书管理器的内部 OCSP 服务 复制链接链接已复制到粘贴板!
证书管理器有一个内置的 OCSP 服务,该服务可供 OCSP 兼容客户端使用,来直接查询证书管理器有关证书的吊销状态。安装证书管理器时,会发出 OCSP 签名证书,并默认打开 OCSP 服务。此 OCSP 签名证书用于签署对 OCSP 服务请求的所有响应。由于内部 OCSP 服务检查存储在证书管理器的内部数据库中的证书状态,因此发布不必配置为使用此服务。
客户端可以通过证书管理器的非 SSL/TLS 最终用户端口查询 OCSP 服务。当查询证书的吊销状态时,证书管理器会为证书搜索其内部数据库,检查其状态,并响应客户端。由于证书管理器具有签发的所有证书的实时状态,因此此方法撤销检查是最准确的。
每个 CA 的内置 OCSP 服务都会在安装时打开。但是,要使用此服务,CA 需要使用授权信息访问扩展来发布证书。
进入 CA 的末尾实体页面。例如:
https://server.example.com:8443/ca/ee/ca- 查找 CA 签名证书。
-
在证书中查找授权信息访问扩展,并记录
Location URIName值,如https://server.example.com:8443/ca/ocsp。 -
更新注册配置文件以启用授权信息访问扩展,并将
Location参数设置为证书管理器的 URI。有关编辑证书配置文件的详情,请参考 第 3.2 节 “设置证书配置文件”。 重启 CA 实例。
# pki-server restart instance-name
要禁用证书管理器的内部 OCSP 服务,请编辑 CA 的 CS.cfg 文件,并将 ca.ocsp 参数的值改为 false。
ca.ocsp=false
6.6.5. 使用 OCSPClient 程序提交 OCSP 请求 复制链接链接已复制到粘贴板!
OCSPClient 程序可用于执行 OCSP 请求。例如:
# OCSPClient -h server.example.com -p 8080 -d /etc/pki/pki-tomcat/alias -c "caSigningCert cert-pki-ca" --serial 2
CertID.serialNumber=2
CertStatus=Good
OCSPClient 命令可与以下命令行选项一起使用:
| 选项 | 描述 |
|---|---|
| -D 数据库 | 安全数据库位置(默认:当前目录) |
| -H hostname | OCSP 服务器主机名(默认值:example.com) |
| -p port | OCSP 服务器端口号(默认为 8080) |
| -t path | OCSP 服务路径(默认为 /ocsp/ee/ocsp) |
| -c nickname | CA 证书别名(defaut: CA Signing Certificate) |
| -n times | 提交次数(默认值:1) |
| --serial serial_number | 要检查的证书序列号 |
| --input input_file | 包含 DER 编码的 OCSP 请求的输入文件 |
| --output output_file | 存储 DER 编码的 OCSP 响应的输出文件 |
| -v,--verbose | 在详细模式下运行 |
| --help | 显示帮助信息 |
6.6.6. 使用 GET 方法提交 OCSP 请求 复制链接链接已复制到粘贴板!
OCSP 请求小于 255 字节,可以使用 GET 方法提交到在线证书状态管理器,如 RFC 6960 所述。通过 GET 提交 OCSP 请求:
为证书生成 OCSP 请求,即正在查询的状态。例如:
# openssl ocsp -CAfile ca.pem -issuer issuer.pem -url https://rhcs10.example.com:22443/ocsp/ee/ocsp -serial 16836380 -reqout - | base64 | tr -d '\n' MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=将 URL 粘贴到 Web 浏览器的地址栏中,以返回状态信息。浏览器必须能够处理 OCSP 请求并将响应文件下载到系统。
https://rhcs10.example.com:22443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=可能的状态是 GOOD
、REVOKED和UNKNOWN。使用openssl工具解析响应:# openssl ocsp -respin <ocsp_response_file> -resp_text
或者,使用 curl 等工具从命令行运行 OCSP,以发送请求和 openssl 来解析响应。例如:
为正在查询状态的证书生成 OCSP 请求。例如:
# openssl ocsp -CAfile ca.pem -issuer issuer.pem -url https://rhcs10.example.com:22443/ocsp/ee/ocsp -serial 16836380 -reqout - | base64 | tr -d '\n' MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=使用
curl连接到 OCSP Manager,以发送 OCSP 请求。# curl --cacert cert.pem https://rhcs10.example.com:22443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE= > ocspresp.der使用
openssl工具解析响应:# openssl ocsp -respin ocspresp.der -resp_text