快速 afnetworking ssl 固定
Posted
技术标签:
【中文标题】快速 afnetworking ssl 固定【英文标题】:swift afnetworking ssl pinning 【发布时间】:2016-01-29 19:58:50 【问题描述】:变量管理器: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 - 同样的问题。我已经尝试了以下所有真假组合。
securityPolicy.validatesDomainName = false securityPolicy.allowInvalidCertificates = false
任何见解将不胜感激。谢谢你
【问题讨论】:
【参考方案1】:经过大量研究和试验......我决定迁移到 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")
【讨论】:
iOS 9 ATS 评论...将以下内容添加到您的 info.plist以上是关于快速 afnetworking ssl 固定的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking 进行证书/SSL 固定 - 如果孩子受信任,如何信任所有父母证书?