如何提供高级API调用安全性 - iOS

Sar*_*ith 15 security proxy ios swift charles-proxy

至于正常的api调用,它将能够使用Charles等网络调试代理进行跟踪.

因此,加密数据和下行数据以避免相同的情况.

但是,当我检查一些应用程序时,它也隐藏了api的URL.如何在iOS中实现相同.

例:

在此输入图像描述

注意:还通过在手机中添加ssl证书进行检查.它仍然没有显示.

art*_*dev 6

此机制称为SSL Pinning.

理论:

什么是钉子?.

固定是一种可选机制,可用于提高依赖SSL证书的服务或站点的安全性.固定允许您指定访问您网站的用户应该接受的加密身份.

这听起来很复杂,但实际上非常简单.让我们从打破这个开始:

加密标识是一种可以通过加密技术证明服务器/主机身份的文件.SSL证书,公钥和CSR都是加密身份的示例.然后该引脚将告诉客户端记住该身份(或身份),并且仅在建立未来安全连接时接受这些身份.

因此,如果您想使用固定,您可以配置您的服务器(在某些情况下 - 考虑内部系统 - 您也可以配置客户端)并指定您想要固定的内容.浏览器和其他客户端将评估每个连接上的固定标识.如果出现任何其他身份,客户端将中止连接(这在您的情况下发生在Charles Proxy中).

想一想:SSL连接告诉客户端与任何与该主机匹配的身份进行加密连接.固定会告诉客户端在建立安全连接时应该接受的特定身份.

因此,例如,如果我们的网站是example.com,我们可以固定身份.当用户访问我们的网站时,他们会收到固定信息.在将来的访问中,如果我们试图让客户端使用不同的身份,他们的浏览器将采取行动.

实践:

SSL固定服务器证书的主键将保存在应用程序包中.然后,当客户端从服务器接收证书时,它会比较2个证书,以确保它们在建立连接之前是相同的.

Alamofire HTTP网络库中有SSL钉扎,很容易使用内置函数:

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)
)
Run Code Online (Sandbox Code Playgroud)

你可以阅读更多在这里这里有关如何在您的应用程序迅速实现SSL钢钉.