【发布时间】:2016-03-20 20:36:30
【问题描述】:
我有一些与后端服务器通信的逻辑,它有两个版本,一个 NSURLConnection 和 NSURLSession。后者是因为 NSURLConnection 已被弃用,而且我们想利用后台下载能力。编写这些类是为了支持客户端证书以对客户端进行身份验证。
在我的整个应用程序中,通过几种不同类型的例程调用进行这种通信的类。
我看到的问题是,在使用 NSURLSession 版本时,我看到 SSL (TLSv1) 会话从未被重用,并且存在完整的 [Client Hello, Server Hello, Certificate, Certificate, Client Key Exchange,证书验证等]每个连接。查看“Client Hello”消息,我可以看到消息中从来没有“会话 ID”,所以我认为这就是 SSL 会话从未被重用的原因。
在较旧的 NSURLConnection 版本中,我发现会话经常被重用,并且之前的会话 ID 在“Client Hello”消息中给出。
在这两种方法中,我都创建了一个新的 NSURLConnection 或 NSURLSession 实例。我认为正在发生的事情是 NSURLConnection 可以在整个应用程序中工作,而 NSURLSession 不能。
但是,我不确定应该如何编写 NSURLSession 逻辑,以便在服务器和客户端之间共享 SSL 会话,并且不会每次都发送客户端证书。我认为一种方法可能是使用单个 NSURLSession 实例,但我不确定这是否是正确的设计模式。
【问题讨论】:
标签: ios session ssl nsurlconnection nsurlsession