К сожалению, в iOS платформа безопасности не дает вам такой же уровень доступа к серийным номерам, DN и altNames, как у OSX.
Однако вы можете получить доступ к сертификату DER в его сыром виде (SecIdentityCopyCertificate ()) и иметь несколько простых функций, таких как SecCertificateCopySubjectSummary (), для извлечения самых минимальных вещей.
Если вы хотите попасть в сериал. DN и (alt) предмет - тогда вам придется анализировать DER на сегодняшней iOS. Довольно простой способ - использовать для этого OpenSSL.
Я нашел http://atastypixel.com/blog/easy-inclusion-of-openssl-into-iphone-app-projects/ прост в установке / использовании.
Как только вы это сделаете, вы можете проверить МЭД:
CFDataRef der = SecCertificateCopyData(cert);
const unsigned char * ptr = CFDataGetBytePtr(der);
int len = CFDataGetLength(der);
d2i_X509(&x509,&ptr,len);
_sha1 = [(__bridge NSData *)der sha1];
и тогда вы отправитесь на гонки с такими вещами, как:
X509_NAME * names_s = X509_get_subject_name(x509);
X509_NAME * names_i = X509_get_issuer_name(x509);
GENERAL_NAMES * subjects = X509_get_ext_d2i( x509, NID_subject_alt_name, 0, 0 );
ASN1_INTEGER *serial = X509_get_serialNumber(x509);
unsigned long s = ASN1_INTEGER_get(serial);
с несколько болезненным переводом всего этого по мере необходимости:
+(NSArray *)names:(GENERAL_NAMES *)sANs {
int i, numAN = sk_GENERAL_NAME_num( sANs );
NSMutableArray * out = [NSMutableArray arrayWithCapacity:numAN];
for( i = 0; i < numAN; ++i ) {
GENERAL_NAME *sAN = sk_GENERAL_NAME_value( sANs, i );
if( sAN->type == GEN_DNS) {
unsigned char *dns;
int len = ASN1_STRING_to_UTF8( &dns, sAN->d.dNSName );
if (len >0) {
[out addObject:[[NSString alloc] initWithData:[NSData dataWithBytes:dns length:len] encoding:NSUTF8StringEncoding]];
OPENSSL_free( dns );
}
}
.. more types as needed ..
}
return out;
}
Спасибо
Dw.