使用OpenSSL的API,我已经提取从X.509v3证书自定义扩展用:

X509_EXTENSION* ex = X509_get_ext(x509, 4);

在X509_EXTENSION对象包含一个值(EX->值)是一个ASN.1 OCTET STRING。的OCTET STRING包含DER编码的UTF-8字符串。我试图给八位字符串解码,以获得简单的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字符串?

有帮助吗?

解决方案

@Francois向我指出的ASN1_get_object()函数。该功能是适合于这种情况下,其中证书扩展仅包含一个值。

ASN1_get_object()取指针的指针到包含DER编码对象C缓冲区。它返回该数据本身(通过调整指针),该数据的长度,所述标签ASN.1值和ASN.1对象类。

ASN1_OCTET_STRING* octet_str = X509_EXTENSION_get_data(extension);
const unsigned char* octet_str_data = octet_str->data;
long xlen;
int tag, xclass;
int ret = ASN1_get_object(&octet_str_data, &xlen, &tag, &xclass, octet_str->length);
printf("value: %s\n", octet_str_data);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top