SSL Pinning 的核心在于对服务器 SSL 证书的验证。在建立 HTTPS 连接时,应用会将预先存储的证书与服务器返回的证书进行比较,只有通过验证后,才会继续进行数据传输。 我们来看看这样一种过程关系: CLIENTSSL_PINNINGSERVER_CERTIFICATEHTTPS_CONNECTIONSERVER使用验证建立通讯 如何在 iOS 中实现 SSL Pinning 下面是一个简单...
在移动应用中,我们常常需要通过 HTTPS 与后端服务器进行数据交换。如果不实施 SSL Pinning,攻击者可能会使用假证书截取数据,导致敏感信息泄露。这对于像抖音这样的社交应用尤为重要,因为它们涉及用户隐私和财务数据。 iOS 中实现 SSL Pinning 的步骤 获取服务器的 SSL 证书或公钥。 将证书或公钥添加到 iOS 项目中。
与我们预期的一样,测试应用中负责pinning验证的委派方法的确会被调用: 我也专门设计了测试应用代码,使其自定义/pinning验证逻辑始终会返回失败: 因此,如果我们能绕过pinning,那么这个连接应当会成功建立。 现在我们已经有测试方案,也搭建了适当的实验环境(启用pinning的应用、已越狱的设备、Xcode等),我们可以开始研究了。
在IOS中通常使用最多的是AFNetworking,除此外还有类似的一些开源封装方案,例如TrustKit,但其根本原理仍然是基于内置证书或公钥实现证书锁定,关于Android的SSl/TLS Pinning请参考Android SSL证书设置和锁定(SSL/TLS Pinning)。 参考文章: Swift 3 How to validate server certificate using SSL Pinning and AlamoFire? IOS...
在准备SSL Pinning的材料阶段,获取证书infinisign.der和公钥infinisign.pubkey,并确保证书格式为DER。如获取的是X.509编码的PEM格式证书,需转换为DER格式,具体操作参考SSL/TLS多种证书类型的转换。对于NSURLSession方式,需要手动执行所有检查。在Swift中,使用NSURLSession进行配置,通过NSURLSessionTask...
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[NSSetsetWithObjects:data,nil]]; manager.securityPolicy = policy; ... 从代码中可以看到,可以一次指定多个证书。 这样一来,App 只接受由指定证书加密的数据,其他数据会拒绝,如下图: ...
SSL pinning 我们使用SSL pinning来确保app通信仅仅发生在指定的服务器上。其中的先决条件就是将目标服务器的SSL证书放到app里面。这个证书被用于会话配置。这里我简单介绍SSL pinning在NSURLSession上的使用。 当谈到NSURLSession使用SSL pinning有点棘手,因为在AFNetworking中,其本身已经有封装好的类可以使用来进行配置。
SSL Pinning(SSL证书固定)是一种安全机制,用于防止中间人攻击(MITM)。在iOS应用中,SSL Pinning通过将应用的某个特定服务器证书的公钥或证书哈希值硬编码到应用中,确保只有持有该证书的服务器才能与应用进行安全通信。这增加了应用与服务器之间通信的安全性。
AFSecurityPolicy *policy = [AFSecurityPolicypolicyWithPinningMode:AFSSLPinningModeCertificatewithPinnedCertificates:[NSSetsetWithObjects:data, nil]]; manager.securityPolicy = policy; ... 从代码中可以看到,可以一次指定多个证书。 这样一来,App 只接受由指定证书加密的数据,其他数据会拒绝,如下图: ...
com.netspi.teston(iPad:9.0.1)[usb]# ios sslpinning disableJob:b748974e-ed6d-4aaf-b5ea-3fb35a13720a-Starting[3fb35a13720a][ios-ssl-pinning-bypass][NSURLSession]Found1matchesforURLSession:didReceiveChallenge:completionHandler:[3fb35a13720a][ios-ssl-pinning-bypass][NSURLConnection]Found5matche...