【问题标题】:How to Enable TLS 1.2, 1.1,1.0, and SSL in iOS app?如何在 iOS 应用中启用 TLS 1.2、1.1、1.0 和 SSL?
【发布时间】:2016-09-16 04:50:06
【问题描述】:

我的问题与 Apple Transport Security (ATS) 有关,我很困惑。

我想在我的 swift 应用程序中支持所有协议(所有版本的 TLS 和 SSL)。如果我将 NSAllowsArbitraryLoads 更改为 false,默认情况下应用程序会在所有协议上运行吗?还是我必须在配置中指定域并添加 NSExceptionMinimumTLSVersion?

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
     <key>NSExceptionDomains</key>
<dict>
    <key>your.servers.domain.here</key>
    <dict>
        <key>NSIncludesSubdomains</key>
        <true/>
        <key>NSExceptionRequiresForwardSecrecy</key>
        <false/>
        <key>NSExceptionMinimumTLSVersion</key>
        <string>TLSv1.0</string>
    </dict>
</dict>

我如何检查我的应用与服务器通信的协议是什么?

【问题讨论】:

  • 您知道要连接的域吗?服务器是用户可以输入的东西,所以你不能提前知道所有的可能性吗?另外,你是如何连接到 URL 的?您使用的是 UIWebView、WKWebview 还是 NSUrlConnection?您的问题的答案因您计划的连接方式而异。

标签: ios tls1.2 app-transport-security


【解决方案1】:

安全连接到 URL

通过 TLS 连接到 URL 很简单。当您创建一个 NSURLRequest 对象以提供给 initWithRequest:delegate: 方法时,请指定 https 作为 URL 的方案而不是 http。连接自动使用 TLS,无需额外配置。

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/SecureNetworking/SecureNetworking.html

【讨论】:

  • 仅供参考,该链接没有说明的是,最近的 iOS 版本默认为 TLS 1.2。如果需要支持旧版本的 TLS,请参阅其他答案。
【解决方案2】:

你会想要阅读https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

简而言之,需要指定 NSExceptionMinimumTLSVersion 来支持 TLS1.0 及以上; 1.2+ 是默认的。

您为什么还要尝试支持较旧、安全性较低的协议?

我不知道您如何检查正在使用的协议,但如果您可以将服务器配置为仅使用 TLS 1.0,那么您的应用将仅使用适当的 TLSv1.0 密钥进行连接;这很容易测试。

【讨论】:

  • 感谢您的回复。我有一个要求,我必须支持所有协议。我已经读过这个。只需要知道我如何检查我的应用程序与服务器通信的协议是什么。我需要确定我编码的内容,因为我无权访问服务器。
  • 检查某个 URL 正在使用哪个协议的一种方法是在 OS X 终端中运行以下实用程序:nscurl --ats-diagnostics --verbose
  • 感谢@miranido,这是检测实现中缺陷的正确方法。
猜你喜欢
  • 2020-04-12
  • 2019-06-04
  • 2018-08-06
  • 2017-08-08
  • 2019-04-29
  • 2020-02-15
  • 2017-02-23
  • 2019-11-30
  • 2021-03-13
相关资源
最近更新 更多