c - openssl 获取证书扩展

标签 c openssl

我正在使用 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);  

此代码告诉我扩展是否关键,并提供了扩展的 ID。

我想可以通过以下方式获得值(value):

ASN1_OCTET_STRING *data= X509_EXTENSION_get_data(扩展名);

但我不确定如何处理检索到的 data 对象。数据对象应该被反编码。 关于如何获取扩展数据的任何想法?

编辑: 按照建议here ,我正在尝试做:

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 中回答了如何使用 key 使用扩展。线程,但每个扩展的实现方式都是相同的。

问候。

关于c - openssl 获取证书扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012981/

相关文章:

c - 只读取一行的第一个字符

iphone - 需要替换 iPhone 项目中使用的 C 代码中 strcpy_s 的使用

Python:导入 OpenSSL 时出错

python - libeay32.dll 的包装器 : how to import macro?

c - 在 C 中使用指针访问多维数组的最简单方法

c - 在函数中调用 fork() 后主进程不打印

.net - 在 dotnet 命令行中获取 SSL 错误

c - SSL_CTX_new :unable to load ssl2 md5 routines

ssl - 在 Curl 中出现错误 - 无法使用已知的 CA 证书对对等证书进行身份验证

c++ - 在所有版本的 C 和 C++ 中,有符号、无符号、长整型和短整型都是有效类型吗?