Uygulamamın güvenliğini artırmak ve kullanıcıyı MITM saldırılarına karşı korumak için, this post içeriğinin ardından kendinden imzalı sertifikamla SSL sabitleme yapmaya çalışıyorum.SSL iOS'ta sabitleme
Bu yüzden, sunucudan aldığım sertifikayı uygulamada bir paketle karşılaştırmak için aşağıdaki kodu kullanıyorum. Benim kod ve ben bağlantılı blog yazısı biri arasında farklı olan
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, 0);
NSData *remoteCertificateData = CFBridgingRelease(SecCertificateCopyData(certificate));
NSLog(@"Remote Certificate Data Length: %d",[remoteCertificateData length]);
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"apache" ofType:@"crt"];
NSData *localCertData = [NSData dataWithContentsOfFile:cerPath];
NSLog(@"Local Certificate Data Length: %d",[localCertData length]);
if ([remoteCertificateData isEqualToData:localCertData]) {
NSURLCredential *credential = [NSURLCredential credentialForTrust:serverTrust];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
else {
[[challenge sender] cancelAuthenticationChallenge:challenge];
}
}
tek şey ismi ve sertifikamı temsil kaynağın uzantısı (.crt .cer) ve iki NSLogs ekledim Bu problemin ne olduğunu göstermek için daha sonra işe yarayacak.
bu kod bu çıktıyı almak yürütüldüğünde Aslında:
verinin uzunluğu farklıdır ve bu yüzden de sabitlemeyi arızalandığı için2013-05-22 16:08:53.331 HTTPS Test[5379:c07] Remote Certificate Data Length: 880
2013-05-22 16:09:01.346 HTTPS Test[5379:c07] Local Certificate Data Length: 1249
Açıkçası Yerel ve Uzaktan sertifikaları arasındaki karşılaştırma başarısız olur.
Bu neden oluyor ve bu sorunu nasıl çözebilirim?
İade edilen sertifika verilerini bir dosyaya kaydetmeyi ve kullanmayı mı düşündünüz? Aksi takdirde, veriler üzerinde bir fark yapın ve neyin farklı olduğunu görün. –
Hayır Bunu düşünmedim! İyi fikir, hemen deneyeceğim! – BigLex
Eğer Alamofire kullanıyorsanız, bu http://jayprakashdubey.blogspot.in/2017/07/ssl-pinning-in-ios-swift-code.html adresine bakın. –