使用OpenSSL的API,我已经提取从X.509v3证书自定义扩展用:解码与OpenSSL的
X509_EXTENSION* ex = X509_get_ext(x509, 4);
的X509_EXTENSION对象包含一个值(EX- >值),这是一个ASN.1 OCTET STRING。 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中代码的例子(约加密/ ASN1/asn1_par.c:135)。以这种方式解码大型结构是非常痛苦的,我推荐使用替代的asn1解析器,如SNACC或libtasn1。 – Francois
@Francois:谢谢你的提示。由于我不是想解码一个大的结构,只需要一个字符串,ASN1_get_object()就足够了。但是,我尝试使用它,基于它在asn1_par.c中的使用方式,但无法使其工作。你能提供一个例子吗? –
@Francois:我发现如何使用该功能并发布了基于此的答案。再次感谢。 –