Ich erstelle eine iOS-Anwendung, die über TLS mit einem Webserver kommuniziert. Wenn ich auf den Webserver zugreife, stellt er meinem Gerät ein Zertifikat vor, und ich möchte bestätigen, dass ich ihm vertrauen kann.TLS-Zertifikat manuell validieren (ios objective-c)
Ich habe das Stammzertifikat in meinem xcode-Projekt als eine Datei eingebettet. Der Code, den ich bisher habe, ruft NSString-Versionen beider Zertifikate in der NSURLConnection-Delegatfunktion für Authentifizierungsherausforderung ab.
Irgendwelche Ideen zur manuellen Validierung?
Hier ist mein aktueller Code:
- (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];
}
}
Das wird funktionieren, aber es ist weniger als ideal, weil das CERT schließlich ablaufen und neu generiert werden wird, und damit nicht mehr den erwarteten Hash übereinstimmen. Es ist besser, den öffentlichen Schlüssel vom Trust-Objekt zu nehmen und diesen mit dem erwarteten Schlüssel zu vergleichen. Auf diese Weise wird der Server weiterhin vertrauenswürdig sein, auch nachdem der Administrator das Zertifikat neu generiert hat (vorausgesetzt, der Administrator ändert den Schlüssel nicht). – dgatwood
Danke für den Link! Ich werde einen Blick werfen –
Hat dieser Link funktioniert? – Harsh