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