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