使用Alamofire 2.0的客户端证书

时间:2015-09-21 20:18:30

标签: ios swift https swift2 alamofire

在Alamofire 1和Swift 1.2上,我使用以下代码发出请求,提交自己的客户端证书:

Alamofire.request(.POST, url!, parameters: params, encoding: .JSON)
    .authenticate(usingCredential: credential)
    .responseJSON { (request, response, JSON, error) in
        ...
    }

使用Alamofire和Swift 2.0,我采用了固定证书并使用我自己的Manager实例。但是,服务器报告未提交有效证书。

let manager = Manager(
    configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),
    serverTrustPolicyManager: ServerTrustPolicyManager(policies:
        ["my.server.com": ServerTrustPolicy.PinCertificates(certificates: [
            SecCertificateCreateWithData(kCFAllocatorDefault,
                NSData(contentsOfFile: NSBundle.mainBundle().pathForResource("root-ca", ofType: "der")!)!)!
            ],
            validateCertificateChain: true, validateHost: true)
        ])
    )

我做错了什么?我无权访问服务器以查看传入请求的外观。但是,接受以下cURL请求:

curl -X POST -d '{"foo": "bar"}' https://my.server.com --cert client.pem --insecure

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

嗯,上面的代码有效!我试图通过创建一个空白项目来隔离问题,并一次添加一个,直到找到错误。由于我无法重现它,我决定在实际项目中删除所有CocoaPods目录并重建整个工作区。事实证明这解决了这个问题。 在没有摆脱现有目录的情况下重建工作区显然是不够的。