NSURLConnection
выдаст вам ошибку (NSURLErrorDomain
), если вы попытаетесь подключиться к серверу с недействительным сертификатом (например, он самоподписан, устарел, имеет неправильный хост и т. Д.). Так что вам на самом деле не нужно выполнять какую-либо проверку самостоятельно, потому что все это обрабатывается за вас.
Если вы действительно хотите / должны отображать сводку SSL-сертификатов в вашем пользовательском интерфейсе, вам нужно будет выпадать слой с NSURLConnection
и использовать вместо него низкоуровневый CFNetwork
API. Когда у вас есть CFReadStreamRef
, который находится в состоянии kCFStreamEventEndEncountered
, вы сможете сделать следующее (при условии, что ваш дескриптор потока называется readStream
):
NSArray* certificates = [(NSArray*)CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) autorelease];
if ([certificates count] > 0) {
SecCertificateRef certificate = (SecCertificateRef)[certificates objectAtIndex:0];
NSString* description = [(NSString*)SecCertificateCopySubjectSummary(certificate) autorelease];
NSData* data = [(NSData*)SecCertificateCopyData(certificate) autorelease];
}
Вам потребуется расшифровать информацию, хранящуюся в data
, если вы хотите получить доступ к различным свойствам сертификата, но для ваших целей может быть достаточно краткого изложения, содержащегося в description
.