本指南讨论 Apple 的应用传输安全 (ATS) 以及如何在您的应用中管理它。
Apple 在其操作系统的每个主要升级中都会引入所有 iOS 和 macOS 开发人员都必须了解的新功能。在 iOS 9 和 macOS 10.11 中,引入了一项特别重要的功能,称为**应用传输安全**,以下简称 **ATS**。
本质上,ATS 是 Apple 针对不安全的 HTTP 和较弱/较旧的 HTTPS 连接的新防护措施。Apple 建议您尽快采用 ATS,无论您是创建新应用还是更新现有应用。其目的是保护您的应用用户免受旧互联网协议中固有的漏洞的攻击,因此最好的方法始终是与其合作,而不是仅仅将其关闭(无论如何,Apple 将在不久的将来移除此选项)。
有关 ATS 的全面详细信息和使用规范,请参阅 Apple 的文档。
ATS 适用于满足以下条件的 iOS 和 macOS 应用:
要允许连接通过 ATS,必须满足以下条件:
虽然我们提供此信息以供参考,但 Corona Labs **不**鼓励绕过任何连接的 ATS,因为其目的是保护用户的隐私。
可以将 ATS 配置为管理某些不满足上述有效连接要求的特定端点。以下步骤概述了此过程:
settings = { iphone = { plist = { NSAppTransportSecurity = { }, }, }, }
NSAppTransportSecurity = { NSExceptionDomains = { }, },
NSAppTransportSecurity = { NSExceptionDomains = { ["example.com"] = { }, }, },
NSAppTransportSecurity = { NSExceptionDomains = { ["example.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true, }, }, },
下表总结了有效选项。有关全面详细信息,请参阅 Apple 的文档。
键 | 值 | 描述 |
---|---|---|
NSIncludesSubdomains |
布尔值 | 一个可选的布尔值,当设置为 `true` 时,会将 `NSExceptionDomains` 例外应用于名称为 |
NSExceptionAllowsInsecureHTTPLoads |
布尔值 | 一个可选的布尔值,当设置为 `true` 时,允许不安全的 HTTP 加载。使用此键来描述您的应用对**可以**控制其安全属性的域的预期网络行为。默认为 `false`。 |
NSExceptionRequiresForwardSecrecy |
布尔值 | 一个可选的布尔值,用于覆盖服务器支持前向保密 (FS) 的要求。使用此键来描述您的应用对**可以**控制其安全属性的域的预期网络行为。默认为 `true`。 |
NSExceptionMinimumTLSVersion |
字符串 | 一个可选的字符串值,用于指定连接的最低传输层安全 (TLS) 版本。使用此键来描述您的应用对**可以**控制其安全属性的域的预期网络行为。默认值为 `TLSv1.2`。 |
NSThirdPartyExceptionAllowsInsecureHTTPLoads |
布尔值 | `NSExceptionAllowsInsecureHTTPLoads` 键的一个版本,用于配置对**无法**控制其安全属性的域的连接。 |
NSThirdPartyExceptionRequiresForwardSecrecy |
布尔值 | `NSExceptionRequiresForwardSecrecy` 键的一个版本,用于配置对**无法**控制其安全属性的域的连接。 |
NSThirdPartyExceptionMinimumTLSVersion |
字符串 | `NSExceptionMinimumTLSVersion` 键的一个版本,用于配置对**无法**控制其安全属性的域的连接。 |
settings = { iphone = { plist = { NSAppTransportSecurity = { NSExceptionDomains = { ["example.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true, }, }, }, }, }, }
作为最后的手段,还可以将 ATS 配置为默认**允许**不安全连接。这可以通过在 `NSAppTransportSecurity` 表中包含 `NSAllowsArbitraryLoads` 键并将其值设置为 `true` 来实现:
NSAppTransportSecurity = { NSAllowsArbitraryLoads = true, },
如果您以这种方式全局绕过 ATS,仍然可以按照上述方法定义例外域。在这种情况下,您可以有效地**增加**对特定服务器的限制。例如,将命名服务器的 `NSExceptionAllowsInsecureHTTPLoads` 键的值设置为 `false` 将
由于 macOS 上的 Corona 模拟器必须模拟所有类型的设备,包括未实现 ATS 的设备,因此它会对所有连接关闭 ATS。