Я создаю приложение iOS, которое обменивается данными с веб-сервером с использованием TLS. Когда я обращаюсь к веб-серверу, он представляет сертификат на моем устройстве, и я хотел бы подтвердить, что могу доверять ему.Вручную проверить сертификат TLS (ios object-c)
У меня есть корневой сертификат, встроенный в мой проект xcode в качестве файла der. Код, который у меня до сих пор, содержит версии NSString обоих сертификатов в функции делегата NSURLConnection для проверки подлинности.
Любые идеи относительно проверки вручную?
Вот мой текущий код:
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
NSLog(@"Certificate challenge");
if (self.stageNum==0) {
id <NSURLAuthenticationChallengeSender> sender=challenge.sender;
NSURLProtectionSpace *protectionSpace=challenge.protectionSpace;
SecTrustRef trust=[protectionSpace serverTrust];
//Get server certificate
SecCertificateRef certificate=SecTrustGetCertificateAtIndex(trust, 0);
NSData *serverCertificateData=(__bridge NSData *)SecCertificateCopyData(certificate);
NSString *serverBase64Certificate=[serverCertificateData base64EncodedStringWithOptions:0];
//Get our certificate
NSData *certData1 = [[NSData alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"SUMOSRoot" ofType:@"der"]];
NSString *certBase64=[certData1 base64EncodedStringWithOptions:0];
//Heres where I need to compare the certificates
//
//
[sender useCredential:[NSURLCredential credentialForTrust:protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
}
Это будет работать, но это не так идеально, потому что сертификат в конечном итоге истекает и восстанавливается, и, следовательно, больше не будет соответствовать ожидаемому хешу. Лучше захватить открытый ключ из объекта доверия и сравнить его с ожидаемым ключом. Таким образом, он будет продолжать доверять серверу даже после того, как администратор восстановит сертификат (при условии, что администратор не изменит ключ). – dgatwood
Спасибо за ссылку! Я посмотрю –
Работает ли эта ссылка? – Harsh