我一直在尝试实现一种使用 NSURLSession 在我的 iOS 8+ 应用程序中进行公钥固定的方法。
我所做的只是实现委托方法 didReceiveChallenge 并获取 challenge.protectionSpace.authenticationMethod 并检查它是否等于 NSURLAuthenticationMethodServerTrust。
如果它等于 NSURLAuthenticationMethodServerTrust 我检查证书并将其与我的本地副本进行比较。
这在 iOS 8 上运行良好,但在 iOS 9 上我没有收到等于 NSURLAuthenticationMethodServerTrust 的身份验证方法。我收到 NSURLAuthenticationMethodClientCertificate 所以我无法访问 challenge.protectionSpace.serverTrust 属性。
有任何想法吗?
public func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)
{
if(challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust)
{
// Verify the identity of the server
println("Trusted")
return challenge.sender.performDefaultHandlingForAuthenticationChallenge!(challenge)
}
println("Not trusted")
return challenge.sender.cancelAuthenticationChallenge(challenge)
}
}