【发布时间】:2016-08-31 01:14:01
【问题描述】:
我有一个问题,不知道该如何解决。我在 ExtendedKeyUsage 扩展中有一个带有自定义 OID(对象标识符)的 X.509v3 证书。如何使用 OpenSSL 1.1.0 从ExtendedKeyUsage 中提取所有 OID?
例如,我在 ExtendedKeyUsage 扩展中创建了一个带有 3 个标志的证书:
"clientAuth, 1.3.6.1.5.5.7.3.103, timeStamping"
clientAuth 和 timeStamping 以 OpenSSL 闻名。中间的标志是我的自定义 OID。我使用 OpenSSL 函数 X509V3_EXT_conf_nid() 添加了所有标志。好的...就所有工作而言。
现在我尝试用X509_get_extended_key_usage(cert) 提取OID,但我只得到clientAuth 和timeStamping。
现在我将 ExtendedKeyUsage 中的原始数据提取为 ASN1_OCTET_STRING,如下所示:
int size;
unsigned char *data;
ASN1_OCTET_STRING *os;
X509_EXTENSION *ext;
// extracting data from certificate extension
ext = X509_get_ext(cert, 2);
os = X509_EXTENSION_get_data(ext);
size = ASN1_STRING_length(os);
data = ASN1_STRING_data(os);
这是data 的十六进制内容:30:1E:06:08:2B:06:01:05:05:07:03:02:06:08:2B:06:01:05:05:07:03:67:06:08:2B:06:01:05:05:07:03:08。
如果我用外部工具解码这个十六进制字符串,我会得到:
Offset|Length|LenByte|
======+======+===================================================
0| 30| 1| SEQUENCE :
2| 8| 1| OBJECT_IDENTIFIER : '1.3.6.1.5.5.7.3.2' (id-kp-clientAuth)
12| 8| 1| OBJECT_IDENTIFIER : '1.3.6.1.5.5.7.3.103'
22| 8| 1| OBJECT_IDENTIFIER : '1.3.6.1.5.5.7.3.8' (id-kp-timeStamping)
我的 OID 可用,但如何在 OpenSSL 中提取此 OID?我可以解析它....以及如何解析? :(
提前谢谢你。
【问题讨论】:
-
您是否尝试使用
openssl asn1parse -i -in cert.der -inform der?
标签: c++ openssl certificate x509 asn.1