【发布时间】:2011-11-11 20:44:57
【问题描述】:
使用 OpenSSL API,我从 X.509v3 证书中提取了一个自定义扩展:
X509_EXTENSION* ex = X509_get_ext(x509, 4);
X509_EXTENSION 对象包含一个 ASN.1 OCTET STRING 值(ex->value)。 OCTET STRING 包含一个 DER 编码的 UTF-8 字符串。我正在尝试解码 OCTET STRING 以获得纯 UTF-8 字符串。
我尝试了一些方法,例如:
ASN1_STRING_to_UTF8(&buf, ex->value);
和
M_ASN1_OCTET_STRING_print(bio, ex->value);
int len = BIO_read(bio, buf, buf_size);
buf[len] = '\0';
这些都给了我 DER 编码的字符串。如何获取纯 UTF-8 字符串?
【问题讨论】:
-
我之前使用 'asn1_get_object' 来执行此操作,遵循 openssl 代码中的示例(围绕 crypto/asn1/asn1_par.c:135)。以这种方式解码大型结构非常痛苦,我建议使用备用 asn1 解析器,例如 SNACC 或 libtasn1。
-
@Francois:谢谢你的提示。由于我没有尝试解码大型结构,因此只需一个字符串, ASN1_get_object() 可能就足够了。但是,我尝试使用它,基于它在 asn1_par.c 中的使用方式,但无法使其正常工作。能举个例子吗?
-
@Francois:我发现了如何使用该功能并基于此发布了答案。再次感谢。