Estoy usando openssl para analizar el certificado X509. Logro obtener extensiones, pero no sé cómo extraer el valor de la extensión.openssl obtener extensiones de certificado
El código que estoy utilizando es:
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);
Este código me dice si la extensión es crítica o no, y me da NID de la extensión.
supongo valor se puede obtener:
ASN1_OCTET_STRING * datos = X509_EXTENSION_get_data (extensión);
pero no estoy seguro de cómo manejar el objeto recuperado data
. Se supone que el objeto de datos está der-codificado. ¿Alguna idea sobre cómo obtener los datos de la extensión?
EDIT: Como sugirió here, yo estaba tratando de hacer:
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);
pero la cadena llego después de la decodificación es el mismo que antes de ella - algo así como: 4Á˃◊∫NsΣäP∂ W ≠% £ A
Creo que algunos ejemplos de certificado (s) y código que compila bien, simplemente sin la visualización adecuada de los valores de extensión, serían increíblemente útiles. – ThiefMaster
Estoy haciendo un proyecto de iOS, y openssl está compilado para iOS. Aún así, si ayuda, agregaré un enlace a él. – Maggie
iOS? ¿Estás realmente usando C o más bien ObjC? – ThiefMaster