TLS 安全性
iOS、iPadOS 和 macOS 支持传输层安全协议(TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3)和数据包传输层安全协议 (DTLS)。TLS 协议同时支持 AES-128 和 AES-256 并首选提供正向保密的密码套件。Safari 浏览器、“日历”和“邮件”等互联网 App 会自动使用此协议在设备与网络服务之间建立一条加密的通信通道。上层 API(如 CFNetwork)使开发者可以轻松在其 App 中采用 TLS,而底层 API(如 Network.framework)则提供精细控制。CFNetwork 不接受 SSL 3,且使用 WebKit 的 App(如 Safari 浏览器)禁止建立 SSL 3 连接。
在 iOS 11 或更高版本和 macOS 10.13 或更高版本中,除非用户信任,否则不允许再将 SHA-1 证书用于 TLS 连接。也不允许使用 RSA 密钥短于 2048 位的证书。RC4 对称密码套件在 iOS 10 和 macOS 10.12 中未予使用。默认情况下,通过 SecureTransport API 实现的 TLS 客户端或服务器未启用 RC4 密码套件,并且当 RC4 是唯一可用的密码套件时无法连接。为了更加安全,需要 RC4 的服务或 App 在升级后才能使用更安全的密码套件。在 iOS 12.1 中,2018 年 10 月 15 日之后由系统信任根证书签发的证书必须在可信任证书透明度日志中记录才可进行 TLS 连接。在 iOS 12.2 中,针对 Network.framework 和 NSURLSession API 默认启用 TLS 1.3。使用 SecureTransport API 的 TLS 客户端不能使用 TLS 1.3。
App 传输安全性
App 传输安全性提供默认的连接要求,这样 App 在使用 NSURLConnection、CFURL 或 NSURLSession API 时会遵守安全连接的最佳实践。默认情况下,App 传输安全性将密码选择范围限制为仅包括提供正向保密的密码套件,具体而言:
伽罗瓦/计数器模式 (GCM) 下的 ECDHE_ECDSA_AES 和 ECDHE_RSA_AES
密码块链接 (CBC) 模式
App 可以按域停用正向保密要求,这种情况下,RSA_AES 会添加到可用密码集中。
服务器必须支持 TLS 1.2 和正向保密,且证书必须有效并使用 SHA256 或更强的加密算法签名,以及包含至少 2048 位 RSA 密钥或 256 位椭圆曲线密钥。
不满足这些要求的网络连接会失败,除非 App 重写了 App 传输安全性。无效的证书始终导致硬故障和无连接。App 传输安全性会自动应用到针对 iOS 9 或更高版本和 macOS 10.11 或更高版本编译的 App。
证书有效性验证
对 TLS 证书信任状态的评估依照既定的行业标准(如 RFC 5280 所列)执行,且整合了新出现的标准,如 RFC 6962(证书透明度)。在 iOS 11 或更高版本以及 macOS 10.13 或更高版本中,Apple 设备会随撤销及受限证书的当前列表来进行定期更新。该列表由 Apple 信任的每个内建根证书颁发机构及其从属的 CA 签发者所发布的证书撤销清单 (CRL) 聚合而成,列表还可能根据 Apple 的要求酌情包括其他限制。每当使用网络 API 函数进行安全连接时都会使用此信息。如果需要单独列出的 CA 撤销证书太多,信任评估可能需要在线证书状态响应 (OCSP),否则将无法通过信任评估。