Как проверить сертификат сайта в Cocoa Touch? - PullRequest
6 голосов
/ 09 августа 2009

В настоящее время я открываю соединение https с веб-сервером, используя NSURLConnection. Все работает как надо, и я могу получить содержимое страницы, которое мне нужно. Сертификат выдан VeriSign, и я предполагаю, что NSURLConnection в какой-то степени работает для проверки подлинности сертификата? Если бы я подключился к тому же сайту через мобильное сафари, он извлек бы из сертификата и отобразил бы Организацию (сайта) на панели навигации. Возможно ли извлечь эти же детали в Cocoa Touch, как я тоже хотел бы представить их пользователю? Кроме того, достаточно ли разумно проверять имя хоста сервера по этому сертификату, чтобы считать сайт легитимным?

1 Ответ

5 голосов
/ 10 августа 2009

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.

...