OCSP 请求构建器

问题描述

我正在使用以下发布的答案检查某些端点的 OCSP 状态: [1]:How to check OCSP client certificate revocation using Python Requests library?

我在尝试验证由 zeroSSL 颁发的证书的 oscp 状态时遇到问题,因为状态返回未经授权,但是,通过某些在线网络服务检查它返回状态为良好。

在 ocsp 请求构建器中将算法从 sha256 更改为 sha1,并且有效。这个哈希算法是在哪里定义的,它是 ocsp 服务器用来签署我假设的请求的算法吗?

我如何事先找到 ocsp 服务器使用的算法,或者是否可以预先确定 ocsp 服务器使用的哈希算法?

def Get_OCSP_ReqBuilder(clientcert,issuercert,ocsp_location):
    builder = OCSPRequestBuilder()
    req = builder.add_certificate(clientcert,SHA256()) # Replaced A SHA1() here.
    req2 = req.build() 
    req_path = base64.b64encode(req2.public_bytes(serialization.Encoding.DER))
    ocsp_requestencoded = urljoin(ocsp_location + '/',req_path.decode('ascii'))
    return ocsp_requestencoded

解决方法

据我所知,SHA1 是发出 OCSP 请求的好地方。 OCSP RFC 的早期版本要求 OCSP 响应者支持它,因此它成为默认设置。 x509 docs 表示唯一受支持的算法是 SHA1、SHA224、SHA256、SHA384 和 SHA512,因此如果您想变得健壮,您可以实施一些后备例程来检查其他算法。如果必须的话,即使尝试所有这些也不会太糟糕。

我遇到了与您相同的问题:使用 SHA256 散列但在我使用 SHA1 时成功的未授权请求的响应状态。这令人沮丧,因为协议中实际上并没有定义查询支持算法的方法的任何内容,而且响应的范围很窄且描述性不强,因此系统最终会收到无用的错误消息。与“未经授权”相比,如果响应是“格式错误的请求”,我可能会更快地追查它。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...