7.6. 使用在线证书状态协议(OCSP)响应器
7.6.1. 设置 OCSP 响应程序 复制链接链接已复制到粘贴板!
如果在配置了在线证书状态管理器时选择了安全域中的 CA,则不需要额外的步骤来配置 OCSP 服务。CA 的 CRL 发布会自动设置,其签名证书会在在线证书状态管理器的证书数据库中自动添加并可信。但是,如果选择了非安全域 CA,则必须在配置在线证书状态管理器后手动配置 OCSP 服务。
在配置 OCSP Manager 所属的安全域中的每个 CA,而不是它的每个 CA 都会被 OCSP Manager 自动信任。CA 面板中配置的 CA 证书链中的每个 CA 都由 OCSP Manager 自动信任。安全域中的其他 CA,但不能手动信任证书链。
为安全域以外的证书管理器设置在线证书状态管理器:
- 为每个将发布到 OCSP 响应器的 CA 配置 CRL。
- 启用发布、设置发布程序,并在 OCSP 服务将处理的每个 CA 中设置发布规则(第 10 章 发布证书和 CRL)。如果证书管理器发布到 LDAP 目录,并且将在线证书状态管理器设置为从该目录读取,则不需要此项。
- 证书配置文件必须配置为包含授权信息访问扩展,指向证书管理器侦听 OCSP 服务请求的位置(第 7.6.4 节 “启用证书管理器的内部 OCSP 服务”)。
配置 OCSP Responder。
- 配置撤销信息存储(第 7.6.2.2 节 “配置撤销信息存储:内部数据库” 和 第 7.6.2.3 节 “配置撤销信息存储:LDAP 目录”)。
- 识别每个发布证书管理器到 OCSP 响应程序(第 7.6.2 节 “识别 CA 到 OCSP Responder”)。
- 如有必要,为签名 OCSP 签名证书的 CA 配置信任设置(第 18.7 节 “更改 CA 证书的信任设置”)。
- 配置这两个子系统后重新启动这两个子系统。
- 验证 CA 是否已正确连接到 OCSP 响应程序(第 7.6.2.1 节 “验证证书管理器和在线证书状态管理器连接”)。
7.6.2. 识别 CA 到 OCSP Responder 复制链接链接已复制到粘贴板!
在将 CA 配置为向在线证书状态管理器发布 CRL 之前,必须在在线证书状态管理器的内部数据库中将 CA 识别为在线证书状态管理器。证书管理器使用与此证书关联的密钥对签名 CRL;在线证书状态管理器针对存储的证书验证签名。
如果在配置在线证书状态管理器时选择了安全域中的 CA,则不需要额外的步骤来配置在线证书状态管理器来识别 CA;在在线证书状态管理器的证书数据库中会自动添加 CA 并可信。但是,如果选择了非安全域 CA,则必须在配置了在线证书状态管理器后手动将 CA 签名证书添加到证书数据库中。
不需要为 CA 导入证书链,后者将其 CRL 发布到在线证书状态管理器。OCSP 服务需要证书链的唯一时间是在发布 CRL 时通过 SSL/TLS 身份验证连接到在线证书状态管理器。否则,在线证书状态管理器不需要完整的证书链。
但是,在线证书状态管理器必须具有为其证书数据库中的 CA 签名证书或单独的 CRL 签名证书的证书。OCSP 服务通过将 CRL 签名的证书与数据库中的证书进行比较来验证 CRL,而不是针对证书链。如果 root CA 及其子 CA 都向在线证书状态管理器发布 CRL,则在线证书状态管理器需要两个 CA 的 CA 签名证书。
要导入用于为 CA 发布的证书签名的 CA 或 CRL 签名证书,请执行以下操作:
- 从 CA 的末尾实体页面中获取证书管理器的 base-64 CA 签名证书。
-
打开 Online Certificate Status Manager agent 页面。URL 的格式是
https://hostname:SSLport/ocsp/agent/ocsp。 - 在左侧框中,单击 。
- 在表单中,将编码的 CA 签名证书粘贴到标有 Base 64 编码证书(包括标头和页脚) 的文本区域。
- 要验证证书是否已成功添加,请在左侧框中单击 List Certificate Authorities。
生成的表单应该显示有关新 CA 的信息。此更新、下一步更新 和 Requests Served Since Startup 字段应显示 0 (0)。
7.6.2.1. 验证证书管理器和在线证书状态管理器连接 复制链接链接已复制到粘贴板!
当证书管理器重启时,它会尝试连接到在线证书状态管理器的 SSL/TLS 端口。要验证证书管理器是否确实与在线证书状态管理器通信,请检查 此 更新和 下一步更新,该字段应该使用与在线证书状态管理器最新通信的适当时间戳进行更新。Requests Served Since Startup 字段应该仍然显示 0 (0)的值,因为没有客户端尝试查询 OCSP 服务以获取证书撤销状态。
7.6.2.2. 配置撤销信息存储:内部数据库 复制链接链接已复制到粘贴板!
Online Certificate Status Manager 将每个证书管理器的 CRL 存储在其内部数据库中,并将其用作 CRL 存储来验证证书的撤销状态。要更改在线证书状态管理器用来在其内部数据库中存储 CRL 的配置:
打开 Online Certificate Status Manager 控制台。
pkiconsole https://server.example.com:8443/ocsp注意pkiconsole已被弃用。在 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 更新时间的时间戳。
7.6.2.3. 配置撤销信息存储:LDAP 目录 复制链接链接已复制到粘贴板!
虽然 OCSP 管理器默认将 CA CRL 存储在其内部数据库中,但可以将其配置为改为使用发布到 LDAP 目录的 CRL。
如果启用了 ldapStore 方法,则 OCSP 用户界面不会检查证书状态。
将在线证书状态管理器配置为使用 LDAP 目录:
打开 Online Certificate Status Manager 控制台。
pkiconsole https://server.example.com:8443/ocsp注意pkiconsole已被弃用。在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。
右侧窗格中显示在线证书状态管理器可以使用的两个存储库;默认情况下,它会在其内部数据库中使用 CRL。
-
要在 LDAP 目录中使用 CRL,点 来启用
ldapStore选项。 -
选择
ldapStore,然后单击 。 设置
ldapStore参数。
- numConns.OCSP 服务应检查的 LDAP 目录的总数。默认情况下,它被设置为 0。设置此值会显示相应的 主机、port、baseDN 和 refreshInSec 字段的数量。
- 主机.LDAP 目录的完全限定 DNS 主机名。
- 端口.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 更新时间的时间戳。
7.6.2.4. 测试 OCSP 服务设置 复制链接链接已复制到粘贴板!
通过执行以下操作来测试证书管理器是否可以正确服务 OCSP 请求:
- 在浏览器或客户端中打开撤销检查。
- 从为 OCSP 服务启用的 CA 请求证书。
- 批准请求。
- 将证书下载到浏览器或客户端。
- 确保 CA 由浏览器或客户端信任。
检查证书管理器的内部 OCSP 服务的状态。
打开 CA 代理服务页面,然后选择 OCSP Services 链接。
测试独立的在线证书状态管理器子系统。
打开在线证书状态管理器代理服务页面,然后单击 List Certificate Authorities 链接。
该页面应当显示有关配置为向在线证书状态管理器发布 CRL 的证书管理器的信息。该页面还总结了自上次启动后的在线证书状态管理器的活动。
- 吊销证书。
- 在浏览器或客户端中验证证书。服务器应返回证书已被撤销。
再次检查证书管理器的 OCSP-service 状态,以验证是否已发生这些问题:
- 浏览器向证书管理器发送 OCSP 查询。
- 证书管理器向浏览器发送 OCSP 响应。
- 使用该响应来验证证书并返回其状态的浏览器无法验证证书。
再次检查独立的 OCSP 服务子系统以验证是否发生以下问题:
- 证书管理器将 CRL 发布到在线证书状态管理器。
- 浏览器向在线证书状态管理器发送 OCSP 响应。
- 在线证书状态管理器向浏览器发送 OCSP 响应。
- 使用该响应来验证证书并返回其状态的浏览器无法验证证书。
7.6.3. 为错误的序列号设置响应 复制链接链接已复制到粘贴板!
OCSP 响应器在确定证书是否有效前检查证书的撤销状态和过期日期,默认情况下,IADP 不会验证证书的其他信息。
notFoundAsGood 参数设置 OCSP 如何处理带有无效序列号的证书。默认启用此参数,这意味着如果证书有错误的序列号,但证书有效,但 OCSP 会为证书返回 GOOD 状态。
要使 OCSP 检查和拒绝基于错误的序列号和撤销状态的证书,请更改 notFoundAsGood 设置。在这种情况下,OCSP 状态返回带有错误序列号的证书。客户端将解释为错误,并相应地响应。
打开 Online Certificate Status Manager 控制台。
pkiconsole https://server.example.com:8443/ocsp注意pkiconsole已被弃用。在 Configuration 选项卡中,选择 Online Certificate Status Manager,然后选择 Revocation Info Stores。
-
选择
defStore,然后单击 。 编辑
notFoundAsGood值。选择该复选框意味着 OCSP 将返回GOOD值,即使证书上的序列号不正确。取消选择复选框意味着 OCSP 发送值UNKNOWN,客户端可以理解为错误。
重启 OCSP Manager。
# pki-server restart instance-name
7.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值,如ui'8443/ca/ocsp'。 -
更新注册配置文件以启用授权信息访问扩展,并将
Location参数设置为证书管理器的 URI。有关编辑证书配置文件的详情,请参考 第 3.2 节 “设置证书配置文件”。 重启 CA 实例。
# pki-server restart instance-name
要禁用证书管理器的内部 OCSP 服务,请编辑 CA 的 CS.cfg 文件,并将 ca.ocsp 参数的值改为 false。
ca.ocsp=false
7.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 证书 nickname (defaut: CA Signing Certificate) |
| -n times | 提交数(默认:1) |
| --serial serial_number | 要检查的证书的序列号 |
| --input input_file | 包含 DER 编码的 OCSP 请求的输入文件 |
| --output output_file | 输出文件存储 DER 编码的 OCSP 响应的文件 |
| -v,--verbose | 以详细模式运行 |
| --help | 显示帮助信息 |
7.6.6. 使用 GET 方法提交 OCSP 请求 复制链接链接已复制到粘贴板!
可以使用 GET 方法向在线证书状态管理器提交小于 255 字节的 OCSP 请求,如 RFC 6960 所述。通过 GET 提交 OCSP 请求:
为证书生成一个 OCSP 请求,该请求正在查询。例如:
# openssl ocsp -CAfile ca.pem -issuer issuer.pem -serial serial_number -reqout - | base64 MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=将 URL 粘贴到 Web 浏览器的地址栏中,以返回状态信息。浏览器必须能够处理 OCSP 请求。
https://server.example.com:8443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=- OCSP Manager 使用浏览器可以解释的证书状态进行响应。可能的状态有 GOOD、REVOKED 和 UNKNOWN。
或者,使用 curl 等工具从命令行运行 OCSP,以发送请求和 openssl 来解析响应。例如:
为证书生成一个 OCSP 请求,该请求正在查询。例如:
# openssl ocsp -CAfile ca.pem -issuer issuer.pem -serial serial_number -reqout - | base64 MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=使用
curl连接到 OCSP Manager,以发送 OCSP 请求。curl https://server.example.com:8443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE= > ocspresp.der使用
openssl解析响应:openssl ocsp -respin ocspresp.der -resp_text
对于使用 GET 方法将 7.1 CA 发布的证书,其授权信息访问扩展要发送到 OCSP,需要创建一个重定向来将请求转发到适当的 URL,如 第 7.6.7 节 “为证书系统 7.1 及更早版本中发布的证书设置重定向” 所述。
7.6.7. 为证书系统 7.1 及更早版本中发布的证书设置重定向 复制链接链接已复制到粘贴板!
与证书系统 7.1 中的位置相比,在带有文件 root /ocsp/ocsp/ 的 URL 中指定 OCSP 用户页面的位置有所不同,这只是 /ocsp/。为了使 7.1 或更早的 CA 发布的证书以及授权信息访问扩展发送到 OCSP,请创建一个重定向以将请求转发到适当的 URL。
只需要设置重定向,才能管理由带有授权信息访问扩展的 7.1 或更早的 CA 发布的证书。如果证书由更新的版本证书管理器或不包含授权信息访问扩展发布,则不需要此配置。
停止 OCSP Responder。
# pki-server stop instance-name进入 OCSP 的最终用户 Web 应用程序目录。例如:
# cd /var/lib/pki-ocsp/webapps/ocsp更改到 OCSP 的 Web 应用程序目录的
ROOT/WEB-INF/目录中的ROOT/WEB-INF/ 目录。例如:# cd /var/lib/pki-ocsp/webapps/ocsp/ROOT/WEB-INF/在 OCSP 的 Web 应用程序目录的
ROOT文件夹中创建并打开lib/目录。# mkdir lib # cd lib/创建链接回
/usr/share/java/pki/cms.jarJAR 文件的符号链接。例如:# ln -s /usr/share/java/pki/cms.jar cms.jar移到主 Web 应用目录。例如:
# cd /var/lib/pki-ocsp/webapps/ocsp/重命名当前实例(
ocsp)目录。例如:# mv /var/lib/pki-ocsp/webapps/ocsp/ocsp /var/lib/pki-ocsp/webapps/ocsp/ocsp2更改到原始
ocsp/目录中的WEB-INF/目录。例如:# cd /var/lib/pki-ocsp/webapps/ocsp/ocsp/WEB-INF在原始的
ocsp/WEB-INF/目录中,编辑web.xml文件,并在eeocspAddCRL和csadmin-wizardservlet 之间添加行映射。<servlet-mapping> <servlet-name> ocspOCSP </servlet-name> <url-pattern> /ee/ocsp/* </url-pattern> </servlet-mapping>在
ROOT目录中创建web.xml文件。例如:<?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> <servlet> <servlet-name>ocspProxy</servlet-name> <servlet-class>com.netscape.cms.servlet.base.ProxyServlet</servlet-class> <init-param> <param-name>destContext</param-name> <param-value>/ocsp2</param-value> </init-param> <init-param> <param-name>destServlet</param-name> <param-value>/ee/ocsp</param-value> </init-param> </servlet> <servlet> <servlet-name>ocspOther</servlet-name> <servlet-class>com.netscape.cms.servlet.base.ProxyServlet</servlet-class> <init-param> <param-name>destContext</param-name> <param-value>/ocsp2</param-value> </init-param> <init-param> <param-name>srcContext</param-name> <param-value>/ocsp</param-value> </init-param> <init-param> <param-name>destServlet</param-name> <param-value></param-value> </init-param> <init-param> <param-name>matchURIStrings</param-name> <param-value>/ocsp/registry,/ocsp/acl,/ocsp/jobsScheduler,/ocsp/ug,/ocsp/server,/ocsp/log, /ocsp/auths,/ocsp/start,/ocsp/ocsp,/ocsp/services,/ocsp/agent,/ocsp/ee, /ocsp/admin</param-value> </init-param> <init-param> <param-name>destServletOnNoMatch</param-name> <param-value>/ee/ocsp</param-value> </init-param> <init-param> <param-name>appendPathInfoOnNoMatch</param-name> <param-value>/ocsp</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ocspProxy</servlet-name> <url-pattern>/ocsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ocspOther</servlet-name> <url-pattern>/ocsp/*</url-pattern> </servlet-mapping> </web-app>编辑
/var/lib/pki-ocsp/conf/context.xml文件,更改以下行:<Context> to <Context crossContext="true" >编辑
/var/lib/pki-ocsp/webapps/ocsp2/services.template文件并更改以下行:result.recordSet[i].uri); to result.recordSet[i].uri + "/");启动 OCSP 实例。
# pki-server start instance-name