OpenSSL ASN1 编码 OID: 使用示例及查找预定义 OID
可以使用 OpenSSL 中的 ASN1_OBJECT 结构体和相应的函数来编码和操作 OID。
例如,下面是一个示例程序,它使用 OpenSSL 的 ASN1_OBJECT 结构体和 i2t_ASN1_OBJECT 函数来打印出一个 OID 的文本表示。
#include <stdio.h>
#include <openssl/asn1.h>
int main() {
const char *oid_str = '1.3.6.1.4.1.311.60.2.1.3';
ASN1_OBJECT *oid = OBJ_txt2obj(oid_str, 1);
if (!oid) {
printf('Error: invalid OID\n');
return 1;
}
char buf[1024];
int len = i2t_ASN1_OBJECT(buf, sizeof(buf), oid);
if (len <= 0) {
printf('Error: failed to convert OID to text\n');
return 1;
}
printf('OID: %s\n', buf);
ASN1_OBJECT_free(oid);
return 0;
}
在这个例子中,我们首先使用 OBJ_txt2obj 函数将一个字符串表示的 OID 转换为 ASN1_OBJECT 结构体。然后,我们使用 i2t_ASN1_OBJECT 函数将 ASN1_OBJECT 结构体转换为一个字符串表示。
要查看 OpenSSL 中预定义的 OID,可以打开 OpenSSL 的 obj_mac.h 头文件。在这个文件中,可以找到各种预定义的 OID,例如:
#define SN_commonName 'CN'
#define LN_commonName 'commonName'
#define NID_commonName 13
在这里,SN_commonName、LN_commonName 和 NID_commonName 分别表示了 OID '2.5.4.3',也就是 X.509 证书中常用的 'CN' 字段。
原文地址: https://www.cveoy.top/t/topic/nIbB 著作权归作者所有。请勿转载和采集!