Estoy usando openssl para obtener datos sobre el certificado x509. ¿Hay alguna forma de convertir ASN1_INTEGER en ASN1_STRING, que puede transformarse fácilmente en una matriz de caracteres? ¿Hay alguna forma de convertirlo a cualquier otro formato legible para humanos?ASN1_INTEGER a ASN1_STRING
EDIT: Estoy usando openssl compilado para iOS, ya que estoy teniendo el proyecto de iOS. Aquí está el código que estoy utilizando para extraer el número de serie del certificado:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
long value = ASN1_INTEGER_get(serial);
NSLog(@"Serial %ld", value);
certificateX509
es un objeto X509 válido y que han logrado obtener algunos otros campos de ella (nombre del emisor, fecha de caducidad, etc.)
EDIT 2:
finalmente llegué a una solución, que puede no ser el más sencillo uno:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
BIGNUM *bnser = ASN1_INTEGER_to_BN(serial, NULL);
int n = BN_num_bytes(bnser);
unsigned char outbuf[n];
int bin = BN_bn2bin(bnser, outbuf);
char *hexbuf = (char*) outbuf;
hexBuf a continuación contiene caracteres cuyo valor debe ser leído como un entero hexadecimal en el orde r para recuperar valores lógicos. utilizo NSMutableString para crear una cadena legible por humanos:
NSMutableString *str = [[NSMutableString alloc] init];
for (int i=0; i<n; i++) {
NSString *temp = [NSString stringWithFormat:@"%.6x", hexbuf[i]];
[str appendString:[NSString stringWithFormat:@"%@ ", temp]];
}
Si hay una manera más sencilla, realmente me gustaría saberlo.
No estoy seguro de lo que está preguntando, pero para los números de serie del certificado probablemente no sea muy útil. Por ejemplo, he comprobado un certificado y el número de serie es "3c 08 cf ee be 9f eb c4 2b b1 3e e0 3d 62 0b df". Es cierto que no hay otra manera más que abrir los archivos de encabezado y extraer la información. –
tienes razón, eso no funciona para mí. Siempre obtengo -1 como un valor largo – Maggie
Parece que no obtiene un ASN1_INTEGER del certificado. Tal vez es un BIGNUM? ¿Puedes agregar el código que usaste para extraerlo del certificado a la pregunta? –