मैं NSURLConnection में स्वयं-हस्ताक्षरित प्रमाणपत्र स्वीकार करने की कोशिश कर रहा हूं, जैसा कि मेरे सामने है। पकड़ यह है कि मैं केवल उन गर्ट्स के श्वेतसूची से सीर्ट स्वीकार करना चाहता हूं जो मुझे विश्वास है। मैं एक प्रमाण को स्वीकार करने के तरीके को समझने के लिए बसूंगा।आईओएस में एक श्वेतसूची से मैं स्वयं हस्ताक्षरित सर्वर प्रमाणपत्र कैसे स्वीकार कर सकता हूं?
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
NSString *thePath = [[NSBundle mainBundle] pathForResource:@"trusted" ofType:@"der"];
NSData *certData = [[NSData alloc] initWithContentsOfFile:thePath];
CFDataRef myCertData = (__bridge_retained CFDataRef)certData;
SecCertificateRef myCert = SecCertificateCreateWithData(NULL, myCertData);
SecPolicyRef myPolicy = SecPolicyCreateBasicX509();
SecCertificateRef certArray[1] = { myCert };
CFArrayRef myCerts = CFArrayCreate(NULL, (void *)certArray, 1, NULL);
SecTrustRef myTrust;
OSStatus status = SecTrustCreateWithCertificates(myCerts, myPolicy, &myTrust);
SecTrustResultType trustResult;
if (status == noErr) {
status = SecTrustEvaluate(myTrust, &trustResult);
}
BOOL trusted = NO;
if (trustResult == kSecTrustResultUnspecified) {
// I never get here. Instead, trustResult is always kSecTrustResultRecoverableTrustFailure
trusted = YES;
}
if (trusted) {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]
forAuthenticationChallenge:challenge];
} else {
[challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge];
}
CFRelease(myTrust);
CFRelease(myCerts);
CFRelease(myPolicy);
CFRelease(myCert);
CFRelease(myCertData);
} else {
[challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge];
}
}
आप टिप्पणी में देख सकते हैं, मैं वास्तव में कभी kSecTrustResultUnspecified है, जो है जो मैं प्राप्त करने की उम्मीद मिलता है: यहाँ कोड मैं अपने NSURLConnectionDelegate में अब तक मिल गया है है। मैंने सत्यापित किया कि मेरा प्रमाणपत्र सही है, और सही प्रारूप (डीईआर) में।
आपको 'trust.der' फ़ाइल कैसे मिलती है? – Hlung
आप एक बनाने के लिए ऑनलाइन एक ट्यूटोरियल देख सकते हैं, और उसके बाद इसे अपने ऐप से पैकेज कर सकते हैं। Google बाकी के साथ मदद करने में सक्षम होना चाहिए। –
मैं सिर्फ उत्सुक हूं कि Google क्रोम की तरह, एक ऐप के अंदर ही इसे उत्पन्न करने के लिए एक तरीका हो सकता है। धन्यवाद बीटीडब्ल्यू। – Hlung