openssl 获取证书扩展

2024-04-24

我正在使用 openssl 解析 X509 证书。 我设法获得扩展,但我不知道如何提取扩展值。

我正在使用的代码是:

  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(扩展名);

但我不知道如何处理检索到的data目的。数据对象应该被反编码。 关于如何获取扩展数据有什么想法吗?

编辑: 按照建议here https://stackoverflow.com/questions/7329390/decoding-an-asn-1-der-octet-string-with-openssl/,我试图这样做:

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


如果你想有一个文本表示,你可以使用内存BIO。我已经回答了如何使用密钥使用扩展this https://stackoverflow.com/questions/10011730/how-to-get-the-keyusage-value-from-the-x509-certificate线程,但每个扩展的执行方法都是相同的。

Regards.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openssl 获取证书扩展 的相关文章

随机推荐