Używam openssl, aby uzyskać dane o certyfikacie x509. Czy istnieje sposób przekonwertowania ASN1_INTEGER na ASN1_STRING, który można łatwo przekształcić w tablicę znaków? Czy istnieje sposób na przekonwertowanie go do dowolnego formatu czytelnego dla człowieka?ASN1_INTEGER do ASN1_STRING
EDYCJA: Używam openssl skompilowany dla iOS, ponieważ mam projekt iOS. Oto kod używam wyodrębnić numer seryjny certyfikatu:
ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
long value = ASN1_INTEGER_get(serial);
NSLog(@"Serial %ld", value);
certificateX509
jest poprawnym obiektem X509 i udało mi się dostać jakieś inne pola z nim (nazwa emitenta, datę ważności i tak dalej)
EDIT 2:
I w końcu przyszedł do rozwiązania, które nie mogą być najprostszym jeden:
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 następnie zawiera znaki, których wartość musi być odczytywane jako hex liczby całkowitej w Orde r, aby pobrać wartości logiczne. używam NSMutableString stworzyć czytelny dla człowieka napis:
NSMutableString *str = [[NSMutableString alloc] init];
for (int i=0; i<n; i++) {
NSString *temp = [NSString stringWithFormat:@"%.6x", hexbuf[i]];
[str appendString:[NSString stringWithFormat:@"%@ ", temp]];
}
Jeśli istnieje prostszy sposób, naprawdę chciałbym to wiedzieć.
Nie jesteś pewien, o co pyta, ale w przypadku numerów seryjnych certyfikatów prawdopodobnie nie jest to zbyt przydatne. Na przykład, sprawdziłem jeden certyfikat i numer seryjny to "3c 08 cf ee be 9f eb c4 2b b1 3e e0 3d 62 0b df". To prawda, że nie ma innego wyjścia, jak tylko otwarcie plików nagłówkowych i wykopanie informacji. –
masz rację, to nie działa dla mnie. Zawsze otrzymuję -1 jako długą wartość – Maggie
Wygląda na to, że nie dostajesz ASN1_INTEGER z certyfikatu. Może to BIGNUM? Czy możesz dodać kod użyty do wyodrębnienia go z certyfikatu na pytanie? –