我很难理解NSURLAuthenticationMethodServerTrust。在我的应用程序中,我必须同时使用基于服务器的http和https连接。我的问题是,如果我收到NSURLAuthenticationMethodServerTrust挑战,那么采取HTTPS连接是否是一个安全的假设。我究竟应该如何应对这一挑战。
任何帮助将不胜感激。谢谢
我不确定接收NSURLAuthenticationMethodServerTrust
是否总是表示https连接。我不明白为什么或如何普通 http 连接会导致NSURLAuthenticationMethodServerTrust
身份验证挑战,所以我假设它是 https,但我不确定。但是NSURLAuthenticationChallenge
有一个NSURLProtectionSpace
,而又有一个属性receivesCredentialSecurely
。文档有点不具体,但我假设此属性表示与服务器的安全连接,在 http/https 的情况下意味着它是 https。
关于要回复的内容,macnetworkprog-mailinglist上有一个关于这个主题的有用线程:问题+答案
摘要:NSURLAuthenticationMethodServerTrust
不是关于您(客户端)响应服务器的身份验证质询,而是让您(客户端)有机会检查您是否应该信任服务器。在这种情况下,质询protectionSpace
包含一个serverTrust
对象/结构,其中包含验证此服务器是否应受信任所需的所有信息。通常,您将使用 SecTrustEvaluate
函数来检查serverTrust
并根据该检查的结果进行操作。您可以在此处找到更多信息:正确覆盖 TLS 链验证
如果检查确定服务器应受信任,则使用 serverTrust
对象创建一个NSURLCredential
,并将其传递给身份验证质询发送方/完成块。
你可以在这里找到苹果的一个相当广泛的示例项目:http://developer.apple.com/library/ios/#samplecode/AdvancedURLConnections/Introduction/Intro.html它很旧(iOS 3/4,pre-Arc),并且只处理旧的NSURLConnectionDelegate
,这些必须委托方法而不是一个(如新的方法和NSURLSessionDelegate
)。但是,此处显示的验证以及您可以实施的不同方案仍然适用,并且应该可以轻松转移到NSURLSession
。