4

我无法理解 NSURLAuthenticationMethodServerTrust。在我的应用程序中,我必须同时使用基于服务器的 http 和 https 连接。我的问题是,如果我收到 NSURLAuthenticationMethodServerTrust 挑战,是否可以安全地假设它是 https 连接。我究竟应该如何应对这一挑战。

任何帮助,将不胜感激。谢谢

4

1 回答 1

1

我不确定接收是否NSURLAuthenticationMethodServerTrust总是表示 https 连接。我不明白为什么或如何简单的 http 连接会导致NSURLAuthenticationMethodServerTrust身份验证挑战,所以我假设它是 https,但我不确定。但是NSURLAuthenticationChallenge有一个NSURLProtectionSpace,而后者又具有一个属性receivesCredentialSecurely。文档有点不具体,但我假设此属性表示与服务器的安全连接,在 http/https 情况下,这意味着它是 https。

关于回复的内容,macnetworkprog-mailinglist 上有一个关于此主题的有用线程:问题+答案

总结:这NSURLAuthenticationMethodServerTrust不是关于你,客户端,响应服务器的身份验证挑战,而是给你,客户端,检查你是否应该信任服务器的机会。在这种情况下protectionSpace,挑战包含一个serverTrust对象/结构,其中包含验证该服务器是否应该被信任所需的所有信息。通常,您会使用该SecTrustEvaluate功能来检查serverTrust并根据检查结果采取行动。您可以在此处找到更多信息:正确覆盖 TLS 链验证

如果检查确定服务器应该是可信的,您可以使用该对象创建一个NSURLCredentialserverTrust并将其传递给身份验证质询发送者/完成块。

您可以在这里找到 Apple 提供的一个相当广泛的示例项目:http: //developer.apple.com/library/ios/#samplecode/AdvancedURLConnections/Introduction/Intro.html 它已经很老了(iOS 3/4,pre-Arc)和只处理NSURLConnectionDelegate必须委托方法而不是委托方法的旧方法(如新方法和NSURLSessionDelegate)。但是那里显示的验证以及您可以实施的不同方案仍然适用,并且应该可以轻松转移到NSURLSession.

于 2016-03-04T09:55:21.683 回答