NSURLSession AuthChallenge反复抛出客户端证书

时间:2017-12-15 12:05:32

标签: authentication nsurlsession client-certificates authenticationchallenge

当我连接到需要客户端证书的SSO X509连接时,我提供了凭据并且成功了。 下次执行didReceiveChallenge委托方法时,auth方法是NSURLAuthenticationMethodServerTrust,我有以下代码用于此authMethod

completionHandler(NSURLSessionAuthChallengeUseCredential,[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);

对于下一个请求,我再次将authMethod作为NSURLAuthenticationMethodClientCertificate。

所以基本上对于每个请求,委托方法都被命中两次,一次使用authMethod作为NSURLAuthenticationMethodClientCertificate,第二次使用authMethod NSURLAuthenticationMethodServerTrust

我不想为每个请求重复获取authMethod作为NSURLAuthenticationMethodClientCertificate。

这是什么原因以及如何避免它?它会影响每次验证的性能

1 个答案:

答案 0 :(得分:0)

我知道你需要做三件事来避免这个问题:

  • 尽可能重用NSURLSession次会话。套接字和TLS会话缓存都不会从一个会话共享到另一个会话,因此如果您不重复使用会话,您将会对每个请求进行全面的身份验证。
  • 确保您的服务器正确支持重新连接到现有会话,并配置为允许此操作。
  • 尽可能使用Wi-Fi。 IIRC,出于电源管理的原因,操作系统在蜂窝电话上杀死连接比在Wi-Fi上更具攻击性。仅仅因为您创建了一个新连接(TLS缓存通常允许您重新连接到服务器上的现有TLS会话),您不会因为完整的auth周期而被击中,但更有可能。

如果这些都没有帮助,请打开DTS事件,Quinn或Rich可以帮助您调试问题。 : - )