gpt4 book ai didi

openssl - 使用 openSSL API 从证书获取 OCSP URL

转载 作者:行者123 更新时间:2023-12-04 12:58:42 24 4
gpt4 key购买 nike

我有一个存储在 X509 结构中的证书,我想从中获取 OCSP 响应程序的 URL。我找到了两种方法来做到这一点 -

方法 1 -

首先,我得到一个 X509_EXTENSION结构如下:

    const STACK_OF(X509_EXTENSION)* ext_stack = NULL;
ext_stack = X509_get0_extensions(cert);
int ext_loc = X509v3_get_ext_by_NID(ext_stack, NID_info_access, -1);
X509_EXTENSION *AIA = X509v3_get_ext(ext_stack, ext_loc);

但是后来我找不到有关如何在此结构中打印数据的任何正确信息。我发现的最好方法是这样的:
    ASN1_OCTET_STRING *asn1_str = X509_EXTENSION_get_data(AIA);
const unsigned char* str = asn1_str->data;
long xlen;
int tag, xclass;
int ret = ASN1_get_object(&str, &xlen, &tag, &xclass, asn1_str->length);
printf("str = %s\n",str);

这种方法有点奏效,但由于中间散落着许多无法打印的字符而无法使用。

方法 2 -

在命令行中,这可以通过以下命令实现:
openssl x509 -noout -ocsp_uri -in extracted.crt.pem

我翻阅了 openSSL 的源代码,看看它是如何打印这些信息的。我找到了函数 X509_get1_ocsp()返回 STACK_OF(OPENSSL_STRINGS) .

这段代码可以毫不费力地打印 URL:
    STACK_OF(OPENSSL_STRING) *str_stack = X509_get1_ocsp(cert);
for(int i = 0;i < sk_OPENSSL_STRING_num(str_stack);i++)
BIO_printf(outbio, "%s\n", sk_OPENSSL_STRING_value(str_stack, i));

但是,我对使用此功能犹豫不决,因为除了源代码之外的任何地方都没有提到它。其他问题的答案更喜欢使用方法 1。我该怎么做?有没有更好的方法来使用方法 1 提取所需的信息,还是应该坚持使用方法 2?

最佳答案

使用方法2 :-)
虽然没有记录,大概是因为没有人自愿或捐赠,但自 2009 年的 0.9.8j(和 2010 年的 1.0.0)以来,它一直在官方导出申报中。
X509 扩展中的数据从来都不是字符串那么简单;它必须是依赖于 OID 的 ASN.1 类型的 DER 编码,参见 Extensionrfc5280 sec 4 .对于 AIA,它是 4.2.2.1 中类型的 DER 编码。 .要按照方法 1 自己执行此操作,您需要使用 d2i_AUTHORITY_INFO_ACCESS 进行解析然后通过元素查找那些用于 OCSP 的元素(并非全部需要,也可能没有)并包含一个 URI(OCSP 应该,根据 rfc2560),然后进行清理,就像代码 in crypto/x509v3/v3_utl.c除非如果您更喜欢其他东西,则不必使用 STACK_OF(OPENSSL_STRING) 作为结果。

关于openssl - 使用 openSSL API 从证书获取 OCSP URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62268949/

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