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) } }