我将使用openssl来解析X509证书。
我已经成功获取了扩展信息,但是我不知道如何提取扩展值。
我正在使用以下代码:
这段代码告诉我扩展是否关键,并给出了扩展的nid。
我认为可以通过以下方式获得值:
ASN1_OCTET_STRING *data= X509_EXTENSION_get_data(extension);
但是我不确定如何处理检索到的"data"对象。数据对象应该是DER编码的。有任何关于获取扩展数据的想法吗?
编辑: 如此建议在这里,我正在尝试执行:
我正在使用以下代码:
X509_EXTENSION *extension = sk_X509_EXTENSION_pop(exts);
int critical = X509_EXTENSION_get_critical(extension);
ASN1_OBJECT *obj = extension-> object;
ln = OBJ_nid2ln(OBJ_obj2nid(obj));
if( !ln ) ln = "";
OBJ_obj2txt(objbuf,sizeof(objbuf),obj,1);
int nid = OBJ_txt2nid(ln);
这段代码告诉我扩展是否关键,并给出了扩展的nid。
我认为可以通过以下方式获得值:
ASN1_OCTET_STRING *data= X509_EXTENSION_get_data(extension);
但是我不确定如何处理检索到的"data"对象。数据对象应该是DER编码的。有任何关于获取扩展数据的想法吗?
编辑: 如此建议在这里,我正在尝试执行:
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);
但是解码后得到的字符串与之前的字符串相同 - 类似于:4Á˃◊∫Ns∑äP∂W≠%£A