查了很多網(wǎng)上的文章,對(duì)moya的https證書校驗(yàn)基本都是略,要么就是16/17年的代碼,但是運(yùn)行的時(shí)候找到證書,轉(zhuǎn)data格式的時(shí)候報(bào)錯(cuò),崩潰;
Alamofire 5.0之后,對(duì)于ssl證書認(rèn)證相關(guān)代碼有修改。
pod 'Moya/RxSwift', '~> 14.0'
不費(fèi)話,下面直接看代碼吧,希望對(duì)你們有幫助;
//MARK: 設(shè)置ssl
let session : Session = {
//證書數(shù)據(jù)
func certificate() -> SecCertificate? {
let filePath = Bundle.main.path(forResource: "存在Xcode中證書的文件名", ofType: "cer")
if filePath == nil {
return nil
}
let data = try! Data(contentsOf: URL(fileURLWithPath: filePath ?? ""))
let certificate = SecCertificateCreateWithData(nil, data as CFData)!
return certificate
}
guard let certificate = certificate() else {
return Session()
}
let trusPolicy = PinnedCertificatesTrustEvaluator(certificates: [certificate], acceptSelfSignedCertificates: false, performDefaultValidation: true, validateHost: true)
let trustManager = ServerTrustManager(evaluators: ["你證書的域名,比如www.baidu.com或者baidu.com" : trusPolicy])
let configuration = URLSessionConfiguration.af.default
return Session(configuration: configuration, serverTrustManager: trustManager)
}()
//把session當(dāng)參數(shù)傳進(jìn)去就行了
let kProvider = MoyaProvider<HXNetworkAPI>(endpointClosure: myEndpointClosure, requestClosure: requestClosure, session: session, plugins: [networkActivityPlugin], trackInflights: false)