NSUrlSessionDelagate质询代理方法不叫

问题描述:

我正在尝试向我的服务器上的API发出HTTPS请求。我有自签名证书。我的理解是,当http传输会遇到SSL信任问题时,下面的委托方法会被调用。NSUrlSessionDelagate质询代理方法不叫

func URLSession(_ session: NSURLSession, 
didReceiveChallenge challenge: NSURLAuthenticationChallenge, 
    completionHandler completionHandler: (NSURLSessionAuthChallengeDisposition, 
           NSURLCredential?) -> Void) 

如果上述方法不存在于委托中,那么将调用任务级挑战函数。

由于某些原因,任何挑战功能都没有被调用。我可以在输出中看到大量CFNetwork SSLHandshake失败(-9801)错误。

我完全知道如何禁用ATS。但我目前的目标不是禁用自签名证书。我有兴趣在挑战功能中处理它。

是否有什么特殊的事情需要完成,以便在ssl信任问题发生时引发挑战功能?是的,适当的委托被分配给NSUrlSession对象。

我已经解决了这个问题。它与服务器的TLS版本协商有关。解释如下:

http://byteblocks.com/Post/CFNetwork-SSLHandshake-failed