Swift 中的 SSL Pinning17 Mar 2025 | 4 分钟阅读 每个移动应用程序都需要从服务器检索信息以显示给用户。但是,应用程序和服务器之间可能会共享一些敏感信息,例如,用户的用户名和密码。 在 iOS 9 中,Apple 提供了应用传输安全 (ATS),它强制应用程序通过采用 HTTPS 协议和传输层安全来维护安全网络连接。 这使得应用程序无法与不安全 (http) 连接通信。 但是,可以通过设置使用自签名证书的 中间人攻击 来绕过应用传输安全。 在本文中,我们将讨论如何在 iOS 应用程序中实现 SSL pinning 以保护网络连接。 我们还将介绍传输层安全和中间人攻击的基础知识。 传输层安全Apple 为我们提供了应用传输安全 (ATS),它允许我们通过实现传输层安全 (TLS) 通过安全 (HTTPS) 网络传输数据。 它使我们能够通过以下三个步骤在安全网络上共享数据。
在此过程中,客户端信任服务器提供的数字证书。 证书充当服务器的身份证明。 证书是一个文本文件,其中包含服务器的信息并遵循 X.509 标准。 它必须由受信任的证书颁发机构签名。 中间人攻击在中间人攻击中,攻击者设置 SSL 代理服务器来拦截客户端发送到服务器的数据。 SSL 代理执行客户端和服务器之间的加密和解密。 例如,Charles 是一种代理服务器,它在应用程序和服务器之间工作并拦截数据以进行测试。 Charles 在以下阶段工作。
SSL PinningSSL Pinning 是一种在 swift 中使用的技术,用于防止中间人攻击。 在此过程中,应用程序在 SSL 握手后再次验证服务器的证书。 客户端维护受信任证书的本地副本,并在运行时将它们与服务器的证书进行比较。 如果服务器的证书与本地副本不匹配,则连接将被中止。 此技术的一个缺点是,每当固定的证书过期时,它都需要更新应用程序。 但是,我们也可以通过在应用程序中固定未来的证书来违反此规则。 我们可以使用哈希公钥而不是固定整个证书,哈希公钥在未来的证书中将是相同的。 SSL Pinning 通过以下两个步骤执行。
要在 iOS 应用程序中实现 SSL Pinning,我们需要一个 SecTrust 对象,它将使用一个或多个证书和策略对象来准备。 SecCertificate 对象由 Apple 提供,用于表示 X.509 证书。 我们可以使用以下代码从捆绑包中检索证书。 既然我们有了证书,我们可以准备一个策略或使用 X.509 证书的标准基本策略。 考虑以下代码来准备策略。 我们也可以通过调用 SecPolicyCreateSSL(_:_: ) 来创建我们的策略,它接受 Server (bool) 和主机名。 Apple 提供了 SecTrust 对象来验证证书和策略。 实现以下代码来验证证书和策略。 我们需要评估在网络调用期间收到的 SecTrust 以及策略,并将证书与固定的证书进行比较。 下一个主题XCode 12 功能 |
我们请求您订阅我们的新闻通讯以获取最新更新。