【问题标题】:Alamofire public key pinning not validating other urlAlamofire 公钥固定不验证其他 url
【发布时间】:2019-09-01 19:44:35
【问题描述】:

我有 3 个baseURL,这 3 个具有不同的 ssl 证书,我已经下载了一个证书并在 Xcode 项目中进行了硬编码,即使我更改了 url 请求,应用程序也不会阻止该请求。

我正在使用这个类

class APIManager {

    static let sharedInstance = APIManager()
    private var manager : SessionManager?
    func sessionManager() -> SessionManager {

        if let manage = self.manager {
            return manage
        }
        else {
            let serverTrustpolicies: [ String: ServerTrustPolicy] = ["url" : .pinPublicKeys(publicKeys: ServerTrustPolicy.publicKeys(), validateCertificateChain: true, validateHost: true)
            ]

            self.manager = SessionManager(
                serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustpolicies)
            )
            let configuration = URLSessionConfiguration.default
            configuration.timeoutIntervalForRequest = 30
            self.manager = SessionManager(configuration: configuration)
            return self.manager!
        }

    }
}

APIManager.sharedInstance.sessionManager().upload(multipartFormData: { (multipartFormData)
}

任何人都可以解释实施吗?

【问题讨论】:

    标签: swift ssl-certificate alamofire certificate-pinning


    【解决方案1】:

    您必须为要验证的每个主机显式设置ServerTrustPolicy 值。因此,当您创建策略字典时,您需要传递每个主机。

    let serverTrustPolicies: [String: ServerTrustPolicy] = ["url" : .pinPublicKeys(publicKeys: ServerTrustPolicy.publicKeys(), validateCertificateChain: true, validateHost: true)]
    

    这应该添加了您的其他基本 URL,并设置了适当的策略。

    【讨论】:

    • 感谢您的宝贵时间。我所做的问题是我没有比较两个引脚(本地引脚和服务器证书引脚)意味着 alamofire 不会自动比较两个公共引脚,我们应该手动比较密钥并根据结果做出决定。我为 alamofire 编写了一个自定义委托会话以进行比较,它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2019-10-03
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多