Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {
- let serverTrust = challenge.protectionSpace.serverTrust
- let certificate = SecTrustGetCertificateAtIndex(serverTrust!, 0)
- // Set SSL policies for domain name check
- let policies = NSMutableArray();
- policies.addObject(SecPolicyCreateSSL(true, (challenge.protectionSpace.host)))
- SecTrustSetPolicies(serverTrust!, policies);
- // Evaluate server certificate
- var result: SecTrustResultType = 0
- SecTrustEvaluate(serverTrust!, &result)
- let isServerTrusted:Bool = (Int(result) == kSecTrustResultUnspecified || Int(result) == kSecTrustResultProceed)
- // Get local and remote cert data
- let remoteCertificateData:NSData = SecCertificateCopyData(certificate!)
- let pathToCert = NSBundle.mainBundle().pathForResource(githubCert, ofType: "cer")
- let localCertificate:NSData = NSData(contentsOfFile: pathToCert!)!
- if (isServerTrusted && remoteCertificateData.isEqualToData(localCertificate)) {
- let credential:NSURLCredential = NSURLCredential(forTrust: serverTrust!)
- completionHandler(.UseCredential, credential)
- } else {
- completionHandler(.CancelAuthenticationChallenge, nil)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment