SSL(安全套接层)和 TLS(传输层安全)——是加密协议,确保客户端和服务器之间通过网络进行安全的数据传输。它们加密所有流量,防止攻击者拦截和修改数据。根据 Google 透明度报告(2025),全球超过 95% 的移动流量使用 TLS 加密。如果没有这个协议,通过开放 Wi-Fi 或移动网络发送的任何信息都可能被第三方读取。 Cloudflare, 2024
要点
SSL(安全套接层)——是 Netscape 公司于 1995 年为保护网络流量而开发的协议。第一版 SSL 1.0 从未发布,SSL 2.0(1995)和 SSL 3.0(1996)一直使用到 2000 年代初,但存在严重漏洞。取代 SSL 的是 TLS(传输层安全)——由 IETF 标准化的改进版本。TLS 1.0(1999)基于 SSL 3.0,后续版本 TLS 1.1(2006)、TLS 1.2(2008)和 TLS 1.3(2018)逐渐远离原始架构,添加了新的加密算法并消除了漏洞。如今 SSL 已被视为过时,所有现代系统都使用 TLS,尽管出于惯性,这两种协议经常被一起提及为 SSL/TLS。
SSL/TLS 的历史始于早期网络对安全数据传输的需求。1994 年,Netscape 为其 Navigator 浏览器开发了 SSL 1.0,但由于严重的安全问题,该协议从未发布。SSL 2.0 于 1995 年发布并在实践中使用,但包含众多漏洞:缺乏针对中间人攻击的保护、加密算法薄弱以及易受截断攻击。SSL 3.0(1996)解决了大部分问题,但到 2014 年发现了 POODLE 漏洞,之后 IETF 正式宣布所有版本的 SSL 都已过时。TLS 1.0–1.3 相继提高了加密强度、性能和机密性,其中 TLS 1.3 将握手从两次往返减少到一次,这对于连接不稳定的移动应用至关重要。
握手——是客户端和服务器之间建立安全连接的过程。它由多个连续步骤组成,双方在此过程中协商协议版本、选择加密算法、交换密钥并相互验证身份。在 TLS 1.3 中,握手只需要一次网络交互(1-RTT),而在 TLS 1.2 中需要两次(2-RTT)。
第一步,客户端发送 ClientHello——包含支持的 TLS 版本列表、密码套件(cipher suites)和随机数的消息。服务器以 ServerHello 回应,包含选定的版本和密码、其 X.509 证书和数字签名。客户端通过证书颁发机构(CA)链验证证书,生成会话密钥,并用证书中服务器的公钥加密后发送。服务器确认后,开始安全的数据传输。整个握手在现代设备上只需 1-3 毫秒,对用户来说不可见。
TLS 身份验证的基础是建立在 X.509 格式证书上的公钥基础设施(PKI)。每个证书包含:域名(通用名称或主题备用名称)、服务器的公钥、颁发者名称(证书颁发机构)、有效期和 CA 的数字签名。客户端通过信任链验证服务器证书:从服务器证书到根 CA,其证书嵌入在操作系统中。在 Android 设备上,根证书存储在系统存储中,通过 Google Play 服务更新;在 iOS 中——通过 iOS 更新。当链中任何一环被破坏(证书过期、域名不匹配、未知 CA)时,客户端断开连接。对于自签名证书(开发中使用),需要显式信任——在 Android 中通过网络安全配置,在 iOS 中通过 Info.plist 中的 NSExceptionDomains。证书链的验证过程还包括通过 CRL(证书吊销列表)或 OCSP(在线证书状态协议)检查吊销状态,尽管在移动设备上 OCSP 请求通常被跳过以加快连接速度——这是架构师需要权衡的安全性与性能之间的折衷。
虽然 SSL 和 TLS 这两个术语经常互换使用,但它们之间存在根本的技术差异,影响移动应用的安全性和性能。
| 特性 | SSL 3.0 | TLS 1.2 | TLS 1.3 |
|---|---|---|---|
| 发布年份 | 1996 | 2008 | 2018 |
| 状态 | 已过时(RFC 7568) | 活跃(推荐) | 当前(最佳) |
| 往返次数 | 2 | 2 | 1 |
| 密钥交换算法 | RSA | RSA、ECDHE | ECDHE(仅) |
| 认证加密 | 否 | GCM、CCM | AEAD 必需 |
| 完美前向保密 | 否 | 可选 | 必需 |
TLS 1.3 与之前版本的主要区别——通过 ECDHE 协议强制使用完美前向保密(PFS)。这意味着即使攻击者获得了服务器的私钥,也无法解密先前拦截的流量。对于服务器入侵是真实威胁的移动应用,带 PFS 的 TLS 1.3 是强制性的安全要求。
过时版本的 SSL 和 TLS 存在已记录的漏洞,使其不适合生产使用。POODLE(CVE-2014-3566)通过填充预言机攻击 SSL 3.0,可在 256 个请求内解密会话 Cookie。BEAST(CVE-2011-3389)通过可预测的 IV 利用 TLS 1.0 在 CBC 模式下的漏洞。Heartbleed(CVE-2014-0160)——不是协议漏洞,而是 OpenSSL 实现中的错误,允许读取服务器内存:根据 Netcraft 的数据,2014 年有超过 50 万台服务器容易受到攻击。从 Android 10(API 29)和 iOS 13 开始,所有上述协议在系统级别被禁用。尽管如此,开发人员应在启动应用程序之前通过 SSL Labs 测试(qualys.com)检查服务器配置,以确保没有过时的密码套件并且支持 TLS 1.3。
在移动应用中,TLS 在三个层面保护数据:内容加密(除服务器外无人能读取数据)、完整性检查(数据在传输过程中无法被修改)和服务器身份验证(客户端确信正在连接到正确的服务器)。身份验证尤为关键:没有它,攻击者可以通过 DNS 欺骗或伪造的 Wi-Fi 接入点冒充服务器。
根据 Google Play Protect(2024)的研究,76% 的 Android 应用正确使用 TLS 并验证证书。其余 24% 会犯错误:为测试禁用证书验证(并忘记在生产中启用)、使用未经验证的自签名证书或允许过时的 SSL 3.0 和 TLS 1.0 协议。Apple App Transport Security(ATS)在 iOS 中自 2017 年起要求至少 TLS 1.2,从 iOS 15 开始默认对所有网络请求使用 TLS 1.3。为了额外保护,还建议实施证书固定——绑定到特定的服务器证书。
让我们看一个使用 OkHttp(最流行的网络库之一)在 Android 中配置安全 HTTPS 连接的示例。正确的配置包括强制使用 TLS 1.3 和证书验证。
val client = OkHttpClient.Builder()
.connectionSpecs(
listOf(
ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_3, TlsVersion.TLS_1_2)
.cipherSuites(
CipherSuite.TLS_AES_128_GCM_SHA256,
CipherSuite.TLS_AES_256_GCM_SHA384,
CipherSuite.TLS_CHACHA20_POLY1305_SHA256
)
.build()
)
)
.hostnameVerifier { hostname, session ->
SSLSession.DefaultHostnameVerifier.verify(hostname, session)
}
.build()
在此示例中,我们将支持的 TLS 版本集限制为仅 1.3 和 1.2 协议,排除过时的 TLS 1.0/1.1。密码套件从具有 AEAD 模式和强制完美前向保密的现代算法中选择。HostnameVerifier 检查主机名与证书的匹配。对于 iOS,通过 URLSession 配置进行类似设置,参数为 tlsMinimumSupportedProtocolVersion,指定为 .TLSv13。此外,在 iOS 中还可以设置 tlsMaximumSupportedProtocolVersion 来限制版本上限——这对于与尚未迁移到 TLS 1.3 的旧服务器兼容很有用。这样的配置可确保移动应用中数据传输时的最大安全级别。
常见问题
TLS——是协议更新、更安全的版本。SSL 已过时,不应再使用(RFC 7568)。在实践中,这两个术语都指 HTTPS 加密,但从技术上讲,所有现代系统都通过 TLS 1.2 或 1.3 运行。
安装代理工具 Burp Suite 或 Charles Proxy 并拦截应用的流量。如果连接使用 HTTPS 且证书有效——应用使用 TLS。如果流量通过 HTTP——则没有加密。
对于生产版本,仅允许 TLS 1.2 和 TLS 1.3。SSL 3.0、TLS 1.0 和 TLS 1.1 协议必须在服务器和客户端应用中禁用。自 2020 年起,主要平台(Android、iOS、浏览器)至少要求 TLS 1.2。
是的,推荐使用。TLS 通过证书颁发机构链验证证书,但如果某个 CA 中心被入侵(2011 年 DigiNotar 曾发生过),攻击者可以颁发虚假证书。证书固定增加了一层额外的验证。
TLS 1.3 将连接建立时间从 2 次往返减少到 1 次,首次连接可提升 30-50%。对于连接不稳定的移动应用(地铁、火车),这对数据加载速度至关重要。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。