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
オブジェクトを処理する方法がわかりません。データオブジェクトは逆エンコードされているはずです。拡張データを取得する方法について何か考えはありますか?
編集:ここで提案されているように、私はやろうとしていました:
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