2013-03-11 12 views
5

Pracuję nad aplikacją na iOS, która będzie musiała odczytać alternatywną nazwę podmiotu z certyfikatu (.pfx).OpenSSL Get Subject Alternatywna nazwa z certyfikatu

Security.framework nie ma sposobu na zdobycie tej informacji, więc używam OpenSSL (openssl-1.0.1e)

Aby przeczytać Nazwa podmiotu Używam X509_get_subject_name (certyfikat) oraz Emitent Używam X509_get_issuer_name (certyfikat) i działa.

Problem stanowi alternatywna nazwa podmiotu. Nie mogę znaleźć żadnej funkcji zwracającej te informacje.

Czy można skorzystać z OpenSSL w celu uzyskania alternatywnej nazwy podmiotu? W jaki sposób?

Edit:

I importowany certyfikat do MAC pęku kluczy. Na temat alternatywnej nazwy podmiotu widzę nazwę główną NT i nazwę RFC 822.

próbowałem tego, ale to wraca NULL:

GENERAL_NAME *name = (GENERAL_NAME*)X509_get_ext_d2i(cert,NID_subject_alt_name, NULL, NULL) 

Czytam certyfikat z tym:

X509 *cert; 
CFDataRef der = SecCertificateCopyData(certificate); 
const unsigned char * ptr = CFDataGetBytePtr(der); 
int len = CFDataGetLength(der); 
d2i_X509(&cert,&ptr,len); 

Odpowiedz

2

można uzyskać x509 alternatywna nazwa podmiotu za pomocą X509_get_ext_by_NID(), a następnie X509_get_ext():

int loc = X509_get_ext_by_NID(X509 *, NID_subject_alt_name, -1); 

if (loc >= 0) { 
    X509_EXTENSION * ext = X509_get_ext(X509 *, loc); 

następnie należy przeanalizować rozszerzenie za pomocą sk_GENERAL_NAME_n um() i sk_GENERAL_NAME_value() lub X509_get_ext_d2i().

+0

Próbuję tego: (GENERAL_NAME *) X509_get_ext_d2i (cert, NID_subject_alt_name, NULL, NULL); Ale jestem nieważny. Czy to powinno działać? – Freedom

+0

Teoretycznie powinieneś otrzymać NULL tylko wtedy, gdy cert ma wartość NULL, certyfikat nie ma alternatywnego rozszerzenia nazwy podmiotu lub więcej niż jednego. Czy mógłbyś opublikować kod ładujący certyfikat do certyfikatu i zawartość certyfikatu (lub wyjście z openssl x509 -w -text jeśli wolisz)? –

+0

Używam X509_get_subject_name() i działa. Zaimportowałem certyfikat do pęku kluczy mac. Na temat alternatywnej nazwy podmiotu widzę nazwę główną NT i nazwę RFC 822 (mają tę samą wartość). Czy to może być problem? – Freedom