2013-03-11 16 views
5

Sto sviluppando un'applicazione iOS che dovrà leggere Nome alternativo soggetto da un certificato (.pfx).OpenSSL Ottieni oggetto Nome alternativo dal certificato

Security.framework non dispone di un modo per ottenere queste informazioni, in modo da sto usando OpenSSL (openssl-1.0.1e)

Per leggere nome soggetto che sto utilizzando X509_get_subject_name (certificato) e per Emittente sto usando X509_get_issuer_name (certificato) e funziona.

Il problema è il nome soggetto alternativo. Non riesco a trovare alcuna funzione per restituire queste informazioni.

È possibile utilizzare OpenSSL per ottenere il Nome alternativo soggetto? Come?

Edit:

ho importato il certificato in MAC portachiavi. In Nome alternativo soggetto Vedo Nome principale NT e Nome RFC 822.

Ho provato questo, ma sta tornando NULL: certificato

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

Sto leggendo con questo:

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

risposta

2

È possibile ottenere il nome alternativo x509 soggetto utilizzando X509_get_ext_by_NID() poi 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); 

quindi è necessario analizzare l'estensione utilizzando sk_GENERAL_NAME_n um() e sk_GENERAL_NAME_value() o X509_get_ext_d2i().

+0

Sto provando questo: (GENERAL_NAME *) X509_get_ext_d2i (cert, NID_subject_alt_name, NULL, NULL); Ma io sono nullo. Dovrebbe funzionare? – Freedom

+0

In teoria si dovrebbe ottenere NULL solo se cert è NULL, il certificato non ha un'estensione di nome alternativo soggetto o più di uno. Potresti postare il codice che carica il certificato in cert e il contenuto del certificato (o l'output di openssl x509 -in -text se lo preferisci)? –

+0

Sto usando X509_get_subject_name() e funziona. Ho importato il certificato nel portachiavi mac. Sull'oggetto Nome alternativo vedo NT Nome principale e Nome RFC 822 (hanno lo stesso valore). Potrebbe essere il problema? – Freedom

Problemi correlati