什么是 OCSP?
在线证书状态协议 (OCSP) 允许网络浏览器和客户端向证书颁发机构 (CA) 检查已颁发 TLS 证书的状态,确保证书未被吊销。
存在不同的方式来检查证书是否已被吊销。每种方式将负担放在不同的参与者身上:
浏览器/客户端:使用 OCSP 与 CA(或通过 CA 委托的 OCSP 响应器)通信。这种方法的一个缺点是 CA 的服务器需要可用。
浏览器厂商:通过与 CA(或通过 CA 委托的 OCSP 响应器)通信并向运行在用户机器上的浏览器分发此列表来维护最新的证书吊销列表。
服务器端:服务器负责与 CA(或通过 CA 委托的 OCSP 响应器)的交互,缓存周期性更新的结果,并在与浏览器/客户端建立 TLS 连接时包含一个“装订响应”(称为 OCSP 装订)。
在 k6 中使用 OCSP
k6 支持 OCSP 装订。应用程序可以接收和解析作为 TLS 连接建立一部分的装订响应。OCSP 响应信息可在响应对象的 ocsp.stapled_response
属性中获取。
import http from 'k6/http';
import { check } from 'k6';
export default function () {
const res = http.get('https://stackoverflow.com');
check(res, {
'is OCSP response good': (r) => r.ocsp.status === http.OCSP_STATUS_GOOD,
});
}
OCSP 对象的属性
OCSP ocsp
对象包含以下属性:
键 | 类型 | 描述 |
---|---|---|
status | string | 证书的状态,参见下面的可能值 |
revocation_reason | string | 证书被吊销的原因(如果状态是吊销),参见下面的可能值 |
produced_at | number | 自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数,表示此 OCSP 装订响应由 CA(或 CA 委托的 OCSP 响应器)签名的时间 |
this_update | number | 自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数,表示所指示的状态已知为正确的时间 |
next_update | number | 自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数,表示此 OCSP 装订响应将在何时由 CA(或 CA 委托的 OCSP 响应器)刷新 |
revoked_at | number | 自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数,表示此证书被吊销的时间(如果状态是吊销) |
status 的可能值
http.OCSP_STATUS_GOOD (证书良好)
http.OCSP_STATUS_REVOKED (证书已吊销)
http.OCSP_STATUS_UNKNOWN (状态未知)
http.OCSP_STATUS_SERVER_FAILED (服务器失败)
revocation_reason 的可能值
http.OCSP_REASON_UNSPECIFIED (未指定原因)
http.OCSP_REASON_KEY_COMPROMISE (密钥泄露)
http.OCSP_REASON_CA_COMPROMISE (CA 泄露)
http.OCSP_REASON_AFFILIATION_CHANGED (所属机构变更)
http.OCSP_REASON_SUPERSEDED (被取代)
http.OCSP_REASON_CESSATION_OF_OPERATION (停止运营)
http.OCSP_REASON_CERTIFICATE_HOLD (证书保留)
http.OCSP_REASON_REMOVE_FROM_CRL (从 CRL 移除)
http.OCSP_REASON_PRIVILEGE_WITHDRAWN (权限撤销)
http.OCSP_REASON_AA_COMPROMISE (AA 泄露)