【发布时间】:2019-02-25 13:04:51
【问题描述】:
对于普通的api调用,它将能够使用Charles等网络调试代理进行跟踪。
所以上行数据和下行数据被加密以避免相同。
但是当我检查一些应用程序时,它也会隐藏 api 的 url。如何在 iOS 中实现同样的效果。
例子:
注意:还通过在我的手机中添加 ssl 证书进行检查。还是没有显示出来。
【问题讨论】:
标签: ios swift security proxy charles-proxy
对于普通的api调用,它将能够使用Charles等网络调试代理进行跟踪。
所以上行数据和下行数据被加密以避免相同。
但是当我检查一些应用程序时,它也会隐藏 api 的 url。如何在 iOS 中实现同样的效果。
例子:
注意:还通过在我的手机中添加 ssl 证书进行检查。还是没有显示出来。
【问题讨论】:
标签: ios swift security proxy charles-proxy
这种机制称为 SSL Pinning。
理论:
什么是固定? .
固定是一种可选机制,可用于改进 依赖 SSL 证书的服务或站点的安全性。固定 允许您指定应接受的加密身份 访问您网站的用户。
这听起来很复杂,但实际上很简单。让我们从 分解:
加密身份是可以证明一个身份的文件 服务器/主机通过密码学。 SSL 证书、公钥、 和 CSR 都是加密身份的示例。那个别针会 然后告诉客户记住该身份(或身份)和 仅在建立未来的安全连接时接受那些。
所以,如果你想使用 pinning,你需要配置你的服务器(在 在某些情况下——想想内部系统——你也可以配置 客户)并指定您想要固定的内容。浏览器及其他 客户端将评估每个连接上的固定身份。如果有的话 提供了其他身份,客户端将中止连接 (这发生在您使用 Charles Proxy 的案例中)。
从大局出发:SSL 连接告诉客户端创建一个 与该主机匹配的任何身份的加密连接。固定 告诉客户他们在制作时应该接受的特定身份 安全连接。
因此,例如,如果我们的网站是 example.com,我们可以固定身份。 当用户访问我们的网站时,他们会收到固定的 信息。在以后的访问中,他们的浏览器会采取行动,如果我们 试图让客户端使用不同的身份。
练习:
SSL 固定该服务器证书的主密钥将保存在应用程序包中。然后,当客户端从服务器接收到证书时,它会在建立连接之前比较两个证书以确保它们相同。
Alamofire HTTP 网络库具有内置的 SSL pinning 功能,非常易于使用:
let pathToCert = Bundle.main.path(forResource: "name-of-cert-file", ofType: "cer")
let localCertificate: NSData = NSData(contentsOfFile: pathToCert!)!
let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
certificates: [SecCertificateCreateWithData(nil, localCertificate)!],
validateCertificateChain: true,
validateHost: true
)
let serverTrustPolicies = [
"my-server.com": serverTrustPolicy
]
let sessionManager = SessionManager(
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
【讨论】: