联机证书状态协议 (Online Certificate Status Protocol, OCSP) 装订是 OCSP 协议的扩展。可以使用 OCSP 装订检查 SSL/TLS 证书的有效性。本节详细介绍了 OCSP 装订。

证书颁发机构 (CA) 可以在计划的过期日期之前吊销 SSL 证书。这意味着,不再信任该证书。在颁发的 SSL 证书有效期过期之前使证书失效的过程称为“证书吊销”。

对于浏览器和客户端来说,检测证书是否已吊销并建议安全警告是至关重要的。可以使用证书吊销列表 (CRL) 或联机证书状态协议 (OCSP) 检查证书吊销情况。

CRL 是包含 CA 吊销的大量证书的列表。在客户端向虚拟服务发送 SSL 连接请求时, NSX Advanced Load Balancer 检查虚拟服务的 PKI 配置文件中的 CA 和 CRL 以验证客户端证书是否仍然有效。

下载和更新包含大量吊销的序列号的列表可能很麻烦。在 OCSP 方法中,客户端查询单个证书的状态,而不是下载并分析整个列表。这会导致客户端和网络上的开销减少。由于 OCSP 请求是针对每个证书发送的,因此,在流量较高的情况下,这可能会给 OCSP 响应程序造成很大的负担。

OCSP 装订

RFC 2560 描述了 OCSP 装订,这是一种检查吊销的证书的新方法。在该方法中,在必须验证证书时,浏览器向 OCSP 响应程序发出包含证书序列号的 OCSP 请求。OCSP 响应程序使用该序列号查找 CA 数据库,并获取与该序列号对应的证书的吊销状态。它通过签名的 OCSP 响应返回证书的吊销状态。

客户端不必每次都与 CA 服务器通信以获取证书状态。在收到请求时,NSX Advanced Load Balancer 检索该信息并将其提供给客户端。

NSX Advanced Load Balancer 中,只能在应用程序证书和根/中间证书上启用 OCSP 装订。对于响应,仅在 TLS/SSL 握手中将应用程序证书的 OCSP 响应装订到证书上。可以通过 NSX Advanced Load Balancer UI 和 CLI 启用和配置 OCSP 装订。

OCSP 装订中的参数

本节介绍了在使用 NSX Advanced Load Balancer 中的 OCSP 装订功能时配置的参数。

时间参数

UI 字段

CLI 标签

描述

频率间隔

ocsp_req_interval

定义 OCSP 请求之间的时间间隔。

响应超时

ocsp_resp_timeout

定义控制器等待 CA 响应的时间间隔。如果响应程序没有响应,则会启动故障切换机制。

失败作业间隔

ocsp_job_fail_interval

在响应 (ocsp_req_interval) 超时内未收到响应时,可以使用该选项计划以较小的间隔执行 OCSP 作业。

最大重试次数

max_tries

无法计划失败的 OCSP 作业的最大次数。

响应程序 URL 操作

如果 OCSP 服务器没有响应,则会启动故障切换机制。可以选择以下 URL 操作之一以作为 URL 操作。

UI 字段

描述

故障切换

选择该方法以严格使用用户配置的 URL (responder_url_lists),而不是 CA 配置的 URL。

覆盖

选择该方法以严格使用用户配置的 URL (responder_url_lists),而不是 CA 配置的 URL。如果选择该方法,则先尝试访问位于证书的 AIA 扩展中的 URL (ocsp_responder_url_list_from_certs)。如果系统无法获取响应,则会改用响应程序 URL 列表 (responder_url_lists)。

注:

如果由于任何原因而无法处理 OCSP 请求,则 OCSPErrorStatus 跟踪状态错误以将失败包括在 OCSP 工作流中。

通过 UI 使用 OCSP 装订

可以通过 NSX Advanced Load Balancer UI 为根/中间 CA 证书和应用程序证书启用 OCSP 装订。

注:
  • 只能在根/中间证书和应用程序证书上启用 OCSP 装订,而不能在控制器证书上启用 OCSP 装订。

  • 对于应用程序证书,目前在 CSR 和导入模式下支持 OCSP 装订。无法为自签名证书启用 OCSP 装订。

要启用 OCSP 装订,请执行以下操作:

  • NSX Advanced Load Balancer UI 中,导航到模板 > 安全性 > SSL/TLS 证书

  • 单击创建 > 根/中间 CA 证书

  • 输入证书的名称

  • 导入文件,或者在上载或粘贴证书文件字段中粘贴详细信息。

  • 选中启用 OCSP 装订复选框以启用该选项。

  • 输入 60 到 31536000 之间的值以作为频率间隔

  • 输入一个值作为响应超时(以秒为单位)。

  • 输入 60 到 86400 秒之间的值以作为失败作业间隔

  • 输入最大重试次数以定义计划执行失败作业的次数(使用失败作业间隔)。在达到最大尝试次数后,将计划作为定期 OCSP 作业(频率间隔)执行该作业。

  • OCSP 响应程序 URL 列表下面,输入用于故障切换/覆盖 OCSP 响应程序的 SSL/TLS 证书中包含的 AIA 扩展的响应程序 URL。

  • 响应程序 URL 操作选择故障切换覆盖,以故障切换或覆盖 OCSP 响应程序的 SSL/TLS 证书中包含的 AIA 扩展。

  • OCSP 响应程序 URL 列表下面,单击添加

  • 选择一个响应程序 URL 操作。将配置具有 OCSP 装订的添加证书屏幕。



  • 单击验证

处理吊销的证书

  • 只要 SSL 证书状态变为已吊销颁发者已吊销,就会引发事件或警示。

  • 如果吊销了证书,则会在 NSX Advanced Load Balancer UI 中将证书状态标记为已吊销

  • 如果吊销了根/中间证书,吊销的根/中间证书颁发的所有证书将标记为颁发者已吊销。控制器停止请求这些证书的 OCSP 证书状态。

  • 所有状态为已吊销颁发者已吊销的证书的 SSL 分数标记为 0。



  • 在证书为已吊销颁发者已吊销时,将添加虚拟服务故障以提醒用户。



SSL 握手期间的 OCSP 装订

在将 OCSP 响应发送到客户端时,在 SSL 握手中交换装订信息的过程如下所示:



通过 CLI 启用 OCSP 装订

可以通过 CLI 在证书对象中使用 enable_ocsp_stapling 标记以配置 OCSP 装订,如以下示例中所示。

[admin:user-ctrl]: > configure sslkeyandcertificate test-cert
[admin:user-ctrl]: sslkeyandcertificate> enable_ocsp_stapling
Overwriting the previously entered value for enable_ocsp_stapling
[admin:user-ctrl]: sslkeyandcertificate> ocsp_config
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> ocsp_req_interval 21600
Overwriting the previously entered value for ocsp_req_interval
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> ocsp_resp_timeout 60
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> url_action ocsp_responder_url_
ocsp_responder_url_failover Used as a Failover URL to the AIA extension contained in the certificate.
ocsp_responder_url_override URL configured is used instead of the URL contained in the AIA extension of the certificate.
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> url_action ocsp_responder_url_failover
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> responder_url_lists
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> responder_url_lists  http://ocsp2.example.com:8080/
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> failed_ocsp_jobs_retry_interval 30
Overwriting the previously entered value for failed_ocsp_jobs_retry_interval
[admin:user-ctrl]: sslkeyandcertificate:ocsp_config> save
[admin:user-ctrl]: sslkeyandcertificate> save

以下是配置详细信息。

+-------------------------------------------+--------------------------------------------------------------------------------------------------+
| Field                                     | Value                                                                                            |
+-------------------------------------------+--------------------------------------------------------------------------------------------------+
| uuid                                      | sslkeyandcertificate-380d9e69-4f04-4519-8151-c89ff2d7bb6f                                        |
| name                                      | test-cert                                                                                        |
| type                                      | SSL_CERTIFICATE_TYPE_VIRTUALSERVICE                                                              |
| certificate                               |                                                                                                  |
| version                                   | 2                                                                                                |
| serial_number                             | 15597070261980010830                                                                             |
| self_signed                               | True                                                                                             |
| issuer                                    |                                                                                                  |
| common_name                               | test.example.com                                                                                 |
| email_address                             | [email protected]                                                                                    |
| organization_unit                         | L7                                                                                               |
| organization                              | abc                                                                                              |
| locality                                  | Bangalore                                                                                        |
| state                                     | Karnataka                                                                                        |
| country                                   | IN                                                                                               |
| distinguished_name                        | C=IN, ST=Karnataka, L=Bangalore, O=VMware, OU=L7, CN=test.example.com, [email protected] |
|                                           |                                                                                                  |    
| enable_ocsp_stapling                      | True                                                                                             |
| ocsp_config                               |                                                                                                  |
|     ocsp_req_interval                     | 21600 sec                                                                                        |
|     ocsp_resp_timeout                     | 60 sec                                                                                           |
|     responder_url_lists[1].               | http://ocsp.example.com/                                                                         |
|     url_action                            | OCSP_RESPONDER_URL_FAILOVER                                                                      |
|     failed_ocsp_jobs_retry_interval       | 30 sec                                                                                           |
| tenant_ref                                | admin                                                                                            |
+-------------------------------------------+--------------------------------------------------------------------------------------------------+
注:

如果成功收到 OCSP 响应,则会比较 next_updateocsp_req_interval 值,并使用两者中的较小值计划下一个 OCSP 请求。

验证证书状态

如果为证书启用了 OCSP 装订,则控制器在证书中的授权信息访问 (Authority Information Access, AIA) 扩展下面查找 OCSP URL,并向找到的 URL 发送请求。支持 GET 和 POST HTTP 方法。先使用 POST 方法发送 OCSP 请求。如果没有响应或出现错误,则使用 GET 方法。

在收到 OCSP 请求时,CA 服务器或响应程序使用证书状态进行响应。无法伪造 OCSP 响应,因为它们是由 CA 直接签名的。NSX Advanced Load Balancer Controller 验证 OCSP 响应的签名。如果响应验证失败,则会丢弃响应,并触发故障切换机制以发送进一步的请求。

CA 使用以下证书状态之一进行响应:

良好:

收到状态查询的肯定响应。因此,在有效间隔内不会吊销具有请求的证书序列号的证书。

已吊销:

已暂时或永久吊销证书。

未知:

响应程序无法识别请求的证书。这可能是因为请求指示无法识别的颁发者,该响应程序不会为该颁发者提供服务。

导航到模板 > 安全性 > SSL/TLS 证书以查看 SSL/TLS 证书的状态。

应用程序日志

生成的应用程序日志具有以下重要性。

  • 证书状态为“已吊销”

  • 证书状态为“颁发者已吊销”

  • 证书状态为“不可用”

  • OCSP 响应失效

要控制上述场景的重要日志,请配置分析配置文件,如以下示例中所示。

[admin:controller-vmdc2]: > configure analyticsprofile
System-Analytics-Profile
[admin:controller-vmdc2]: > configure analyticsprofile System-Analytics-Profile
Updating an existing object. Currently, the object is:
+-------------------------------------------------+-------------------------------------------------------+
| Field                                           | Value                                                 |
+-------------------------------------------------+-------------------------------------------------------+
| uuid                                            | analyticsprofile-1775513e-bbf5-47ce-a067-42237c91315d |
| name                                            | System-Analytics-Profile                              |
| tenant_ref                                      | admin                                                 |
| exclude_revoked_ocsp_responses_as_error         | True                                                  |
| exclude_stale_ocsp_responses_as_error           | True                                                  |
| exclude_issuer_revoked_ocsp_responses_as_error  | True                                                  |
| exclude_unavailable_ocsp_responses_as_error     | True                                                  |
| hs_security_ocsp_revoked_score                  | 0.0                                                   |
| enable_adaptive_config                          | True                                                  |
+-------------------------------------------------+-------------------------------------------------------+

+-------------------------------------------------+-------------------------------------------------------+
[admin:controller-vmdc2]: analyticsprofile> no exclude_revoked_ocsp_responses_as_error                    | 
+-------------------------------------------------+-------------------------------------------------------+
| Field                                           | Value                                                 |
+-------------------------------------------------+-------------------------------------------------------+
| uuid                                            | analyticsprofile-1775513e-bbf5-47ce-a067-42237c91315d |
| name                                            | System-Analytics-Profile                              |
| tenant_ref                                      | admin                                                 |
| exclude_revoked_ocsp_responses_as_error         | False                                                 |
| exclude_stale_ocsp_responses_as_error           | True                                                  |
| exclude_issuer_revoked_ocsp_responses_as_error  | True                                                  |
| exclude_unavailable_ocsp_responses_as_error     | True                                                  |
| hs_security_ocsp_revoked_score                  | 0.0                                                   |
| enable_adaptive_config                          | True                                                  |
+-------------------------------------------------+-------------------------------------------------------+

+-------------------------------------------------+-------------------------------------------------------+
[admin:controller-vmdc2]: analyticsprofile>  hs_security_ocsp_revoked_score 3.0                           | 
+-------------------------------------------------+-------------------------------------------------------+
| Field                                           | Value                                                 |
+-------------------------------------------------+-------------------------------------------------------+
| uuid                                            | analyticsprofile-1775513e-bbf5-47ce-a067-42237c91315d |
| name                                            | System-Analytics-Profile                              |
| tenant_ref                                      | admin                                                 |
| exclude_revoked_ocsp_responses_as_error         | False                                                 |
| exclude_stale_ocsp_responses_as_error           | True                                                  |
| exclude_issuer_revoked_ocsp_responses_as_error  | True                                                  |
| exclude_unavailable_ocsp_responses_as_error     | True                                                  |
| hs_security_ocsp_revoked_score                  | 3.0                                                   |
| enable_adaptive_config                          | True                                                  |
+-------------------------------------------------+-------------------------------------------------------+

可以配置以下字段。

  • exclude_revoked_ocsp_responses_as_error

  • exclude_stale_ocsp_responses_as_error

  • exclude_issuer_revoked_ocsp_responses_as_error

  • exclude_unavailable_ocsp_responses_as_error

默认情况下,将启用这些字段。在设置为 True 时,将从重要日志中排除相应的日志。要将这些日志包括在重要日志中,请将这些字段设置为 False

此外,还可以配置 hs_security_ocsp_revoked_score。默认情况下,在吊销了证书或颁发者证书时,分数将设置为 0.0。

风险和风险缓解

OCSP 装订是非常有效的,因为它将 OCSP 请求负载从浏览器分流到服务器。这是可选的。浏览器不知道响应是否是预期的,因此,它们使用软失败行为。这可能会产生安全隐患。为了避免这种可能性,使用了称为 OCSP 必须装订的证书扩展。通过使用该标签,服务器通知浏览器必须为证书提供有效的 OCSP 响应,否则,不会接受该证书。

如果存在安全隐患,即使攻击者具有密钥,他们在使用证书时也必须提供 OCSP 装订。否则,浏览器将拒绝该证书。如果包含 OCSP 装订,则响应将证书标识为已吊销,并且浏览器拒绝该证书。这缓解了 OCSP 装订的安全问题。

注意事项

RFC6961 中描述的 OCSP 装订版本 2 定义了新的扩展 (status_request_v2),它允许客户端请求链中的所有证书的状态。目前,在 NSX Advanced Load Balancer 中不支持多个证书状态请求。在客户端发送包含 status_request_v2 扩展的客户端 Hello 时,NSX Advanced Load Balancer 仅返回直接附加到虚拟服务的应用程序证书的证书状态。