gpt4 book ai didi

c++ - 使用 OpenSSL 查询 X509 证书的扩展

转载 作者:可可西里 更新时间:2023-11-01 17:55:29 24 4
gpt4 key购买 nike

我正在使用 OpenSSL 库的 X509 证书类,我需要查询“ key 用法”扩展。

在放弃 OpenSSL 的 vapourware“文档”之后,一些暗网搜索最终显示我需要调用

X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx) 

并搜索 objects.h header 显示了正确的 NID。

问题是,这个调用返回一个指向 void 的指针,它显然可以指向各种结构,具体取决于请求的扩展。

由于这些似乎都没有记录在案,因此没有办法弄清楚如何解析函数返回的内容。

谁能给我指出一份真正讨论这个的文件,而不是仅仅列出我可以自己找到的东西(功能配置文件,它来自哪个文件,等等)?

最佳答案

阅读 key 用法的最简单解决方案似乎是

X509* x509_cert = ...
// without X509_check_ca x509_cert->ex_kusage always returns 0 (no idea why)
int ca = X509_check_ca(x509_cert);
unsigned long usage = x509_cert->ex_kusage;

结果值在 opensc/pkcs15-init.h 中定义

SC_PKCS15INIT_X509_DIGITAL_SIGNATURE     0x0080UL
SC_PKCS15INIT_X509_NON_REPUDIATION 0x0040UL
SC_PKCS15INIT_X509_KEY_ENCIPHERMENT 0x0020UL
SC_PKCS15INIT_X509_DATA_ENCIPHERMENT 0x0010UL
SC_PKCS15INIT_X509_KEY_AGREEMENT 0x0008UL
SC_PKCS15INIT_X509_KEY_CERT_SIGN 0x0004UL
SC_PKCS15INIT_X509_CRL_SIGN 0x0002UL

我通过找到 openssl 源文件的以下代码得出了这个结论

/* Handle key usage */
if((usage=X509_get_ext_d2i(x, NID_key_usage, NULL, NULL))) {
if(usage->length > 0) {
x->ex_kusage = usage->data[0];
if(usage->length > 1)
x->ex_kusage |= usage->data[1] << 8;
} else x->ex_kusage = 0;
x->ex_flags |= EXFLAG_KUSAGE;
ASN1_BIT_STRING_free(usage);
}

关于c++ - 使用 OpenSSL 查询 X509 证书的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/513919/

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