【问题标题】:Alamofire ssl wrong: sessionDeinitializedAlamofire ssl 错误:sessionDeinitialized
【发布时间】:2020-10-25 10:13:58
【问题描述】:

我正在尝试使用自定义证书连接到我的 https 服务器(在服务器上导出 .p12 证书)。

这是我的代码:

let filePath = Bundle.main.path(forResource: "ch-server", ofType: "cer")
let data = try! Data(contentsOf: URL(fileURLWithPath: filePath!))
let certificate = SecCertificateCreateWithData(nil, data as CFData)!
let pinEvaluator = PinnedCertificatesTrustEvaluator(certificates: [certificate], acceptSelfSignedCertificates: true, performDefaultValidation: true, validateHost: true)
let trustManager = ServerTrustManager(evaluators: [CHConstants.ApiHost: pinEvaluator])
let session = Session(serverTrustManager: trustManager)
        
session.request(url, method: .post, parameters: ["phone", phone], encoder: JSONParameterEncoder.default, headers: headers).responseJSON { response in
    switch response.result {
    case .success:
        print("data:\(response.data)")
    case let .failure(error):
        print("error:\(error)")
    }
}
        
//        AF.request(url, method: .post, parameters: ["phone", phone], encoder: JSONParameterEncoder.default, headers: headers).responseJSON { response in
//            switch response.result {
//            case .success:
//                print(response.data)
//            case let .failure(error):
//                print(error)
//            }
//        }

但响应是错误的:

error:sessionDeinitialized

【问题讨论】:

  • 如果您想固定您的自签名证书并且您的目标中有.cer 文件,您可以将pinEvaluator 的创建减少为:let pinEvaluator = PinnedCertificatesTrustEvaluator(acceptSelfSignedCertificates: true, performDefaultValidation: false, validateHost: true)
  • 你是怎么解决的?

标签: swift https certificate alamofire


【解决方案1】:

您需要保持您的 Session 实例处于活动状态。否则它将立即取消初始化并取消您的请求,这就是该错误所表明的。最常见的是通过单例或其他参考存储模式来完成。

【讨论】:

  • 定义一个最终类和一个全局变量“会话”,然后使用静态初始化该类。对吗?
猜你喜欢
  • 2021-09-14
  • 2023-03-04
  • 2019-10-29
  • 2018-09-04
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多