2013-03-11 16 views
5

Ich entwickle eine iOS-App, die Antragstellernamen aus einem Zertifikat (.pfx) lesen muss.OpenSSL Subject Alternative Name aus Zertifikat

Security.framework haben keine Möglichkeit, diese Informationen zu erhalten, so dass Sie Ich bin mit OpenSSL (OpenSSL-1.0.1e)

Subject Name lesen Ich bin mit X509_get_subject_name (Zertifikat) und für Aussteller Ich verwende X509_get_issuer_name (Zertifikat) und funktioniert.

Das Problem ist der alternative Antragstellername. Ich kann keine Funktion finden, um diese Information zurückzugeben.

Ist es möglich, mit OpenSSL den alternativen Antragstellernamen zu erhalten? Wie?

Edit:

importiert ich das Zertifikat in MAC-Schlüsselanhänger. Bei alternativen Antragstellername sehe ich NT Principal Name und RFC 822 Name.

habe ich versucht, diese aber es kehrt NULL:

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

Ich lese Zertifikat mit diesem:

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

Antwort

2

Sie können die x509 Thema alternative Namen erhalten, indem X509_get_ext_by_NID() dann X509_get_ext mit():

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

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

Dann müssen Sie die Erweiterung mit sk_GENERAL_NAME_n analysieren um() und sk_GENERAL_NAME_value() oder X509_get_ext_d2i().

+0

Ich versuche dies: (GENERAL_NAME *) X509_get_ext_d2i (cert, NID_subject_alt_name, NULL, NULL); Aber ich bin null. Sollte es funktionieren? – Freedom

+0

Theoretisch sollten Sie nur NULL erhalten, wenn cert NULL ist, das Zertifikat hat keine alternative Namensnennung oder mehr als eins. Können Sie den Code, der das Zertifikat in cert lädt, und den Inhalt des Zertifikats (oder die Ausgabe von openssl x509 -in -text, wenn Sie das bevorzugen) veröffentlichen? –

+0

Ich verwende X509_get_subject_name() und funktioniert. Ich habe das Zertifikat in den Mac-Schlüsselbund importiert. Beim alternativen Antragstellername sehe ich NT Principal Name und RFC 822 Name (sie haben den gleichen Wert). Könnte das das Problem sein? – Freedom

Verwandte Themen