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