gpt4 book ai didi

c - 使用 OCSP 装订在客户端程序中进行 OpenSSL 证书吊销检查

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:30 24 4
gpt4 key购买 nike

我有一个嵌入式 C 客户端程序,它使用 OpenSSL 安全地连接到服务器。服务器在握手期间提供其证书,客户端必须检查该证书的吊销状态。目前,我使用 OCSP 来执行此操作。

所有这些都有效,但现在我需要使用 OCSP stapling 重新执行客户端的吊销检查(假设服务器将开始提供这个)。

目前,我使用 X509 *cert = SSL_get_peer_certificate(ssl) 获取服务器证书,以根据我的服务器域检查 subjectAltName 并获取 authorityInfoAccess(对于 OCSP URI)。

假设我有一个 SSL * ssl; 并且我成功地设置了所有内容并通过 SSL_connect(ssl); 进行了连接,此时我该怎么做才能获得OCSP 装订信息并验证我刚刚收到的证书?我找不到关于如何使用 OpenSSL 库实际实现它的任何示例代码。

最佳答案

有几个步骤:

  1. 让客户端通过 SSL_set_tlsext_status_type(ssl, TLSEXT_STATUSTYPE_ocsp) 发送 status_request 扩展。

  2. 注册回调(和参数)以通过 SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb)SSL_CTX_set_tlsext_status_arg(ctx, arg)

    检查 OCSP 响应
  3. 编写回调函数。 s_client使用的那个演示了如何获取响应信息:

    static int ocsp_resp_cb(SSL *s, void *arg)
    {
    const unsigned char *p;
    int len;
    OCSP_RESPONSE *rsp;
    len = SSL_get_tlsext_status_ocsp_resp(s, &p);
    BIO_puts(arg, "OCSP response: ");
    if (!p)
    {
    BIO_puts(arg, "no response sent\n");
    return 1;
    }
    rsp = d2i_OCSP_RESPONSE(NULL, &p, len);
    if (!rsp)
    {
    BIO_puts(arg, "response parse error\n");
    BIO_dump_indent(arg, (char *)p, len, 4);
    return 0;
    }
    BIO_puts(arg, "\n======================================\n");
    OCSP_RESPONSE_print(arg, rsp, 0);
    BIO_puts(arg, "======================================\n");
    OCSP_RESPONSE_free(rsp);
    return 1;
    }

关于c - 使用 OCSP 装订在客户端程序中进行 OpenSSL 证书吊销检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com