Saya mempunyai soalan berikut tentang menggunakan sijil yang ditandatangani sendiri untuk https:
1. Untuk sijil yang ditandatangani sendiri, mengikut maklumat di Internet, anda perlu mengimport sijil pada pelanggan dan kemudian mengesahkan sijil Jika anda tidak mengesahkan sijil, apakah risiko dan masalah secara langsung menggunakan kelayakan yang dihantar untuk komunikasi?
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
//1)获取trust object
SecTrustRef trust = challenge.protectionSpace.serverTrust;
NSURLCredential *cred = [NSURLCredential credentialForTrust:trust];
[challenge.sender useCredential:cred forAuthenticationChallenge:challenge];
}
Saya sering melihat sekeping kod seperti ini di Internet. Pada pendapat anda, bagaimanakah kod ini disahkan?
NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;
__block NSURLCredential *credential = nil;
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
disposition = NSURLSessionAuthChallengeUseCredential;
credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
} else {
disposition = NSURLSessionAuthChallengePerformDefaultHandling;
}
if (completionHandler) {
completionHandler(disposition, credential);
}
1. Permintaan langsung tanpa mengesahkan sijil adalah bermasalah
2 Pihak lain terlebih dahulu menentukan sama ada pelayan sijil boleh dipercayai, dan kemudian mengendalikan sijil dengan sewajarnya. Lihat HTTP iOS untuk mendapatkan butiran.