我有一个嵌入式C客户端程序,该程序使用OpenSSL安全地连接到服务器。服务器在握手期间提供其证书,客户端必须检查此证书的吊销状态。目前,我是通过使用OCSP来完成此操作的。
所有这些工作正常,但是现在我需要使用OCSP stapling重新实现客户端的吊销检查(假设服务器将开始提供此功能)。
目前,我使用X509 *cert = SSL_get_peer_certificate(ssl)
获得服务器证书,以对照服务器的域检查subjectAltName
并获得authorityInfoAccess
(用于OCSP URI)。
假设我有一个SSL * ssl;
,并且我成功设置了所有内容并通过SSL_connect(ssl);
连接,这时我该怎么做才能获得OCSP装订信息并验证我刚刚收到的证书?我找不到任何有关如何使用OpenSSL库实际实现此功能的示例代码。
最佳答案
有几个步骤:
status_request
发送SSL_set_tlsext_status_type(ssl, TLSEXT_STATUSTYPE_ocsp)
扩展名。 SSL_CTX_set_tlsext_status_cb(ctx, ocsp_resp_cb)
和SSL_CTX_set_tlsext_status_arg(ctx, arg)
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/