1

变量管理器:AFHTTPSessionManager

init() {
    manager = AFHTTPSessionManager()
    manager.requestSerializer = AFJSONRequestSerializer()
    manager.responseSerializer = AFJSONResponseSerializer()

    let securityPolicy = AFSecurityPolicy(pinningMode: AFSSLPinningMode.Certificate)
    let certificatePath = NSBundle.mainBundle().pathForResource("c38acbe05a6328ee", ofType: "crt")!
    let certificateData = NSData(contentsOfFile: certificatePath)!

    securityPolicy.pinnedCertificates = [certificateData]
    securityPolicy.validatesDomainName = false
    securityPolicy.allowInvalidCertificates = false

    manager.securityPolicy = securityPolicy
}

我一直在努力让它工作一段时间。Swift 文档很少,但我在阅读 obj-c 方面做得更好。证书是 PEM 格式,我已经尝试过并转换为 .der 格式。Der 格式在 init() 中爆炸,.PEM 格式在评估服务器信任中爆炸。我在 AFNetworking 2.5.1 中尝试过并升级到 3.0.4 - 同样的问题。对于以下内容,我已经尝试了 true 和 false 的所有组合。

securityPolicy.validatesDomainName = false securityPolicy.allowInvalidCertificates = false

任何见解将不胜感激。谢谢

4

1 回答 1

0

经过大量的研究和试验......我决定迁移到 Alamofire 3.0 并且解决方案来了。请注意以下几点: 证书必须为 .der 格式。我的是 .pem 格式。我的证书是针对“叶子”的,即不包括证书链。对于 iOS 9.0,我必须为我的服务器添加 ATS 传输。

工作示例:

var manager: Manager

init() {
    let serverTrustPolicies: [String: ServerTrustPolicy] = [
        "myserver.com": .PinCertificates(
            certificates: ServerTrustPolicy.certificatesInBundle(),
            validateCertificateChain: false,
            validateHost: true
        )
    ]

    manager = Alamofire.Manager(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),
                                serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies))
}



let email = defaults.objectForKey("email") as? String
let beacon = defaults.objectForKey("beacon") as? String

let credential = NSURLCredential(user: email!, password: beacon!, persistence: NSURLCredentialPersistence.ForSession)

manager.request(.GET, url, encoding: .JSON)
.authenticate(usingCredential: credential)
.responseJSON { response in
    switch response.result {
    case .Success(let data):
        print(data)
        self.delegate?.didReceivePersonResults!(data as! NSDictionary)
    case .Failure(let error):
        print(error)
        self.delegate?.didReceivePersonError!("Server Error")
    }
}
于 2016-02-12T20:34:56.473 回答