AlamofireImage设置忽略不受信任的https
2020-06-29 本文已影响0人
狂奔的胖蜗牛
问题描述
使用AlamofireImage下载图片,报了如下的错:
Task <21B3A034-BFE5-4B71-B6A8-4B282C003E50>.<5> load failed with error Error Domain=NSURLErrorDomain Code=-1202 "此服务器的证书无效。您可能正在连接到一个伪装成“139.196.20.65”的服务器,这会威胁到您的机密信息的安全。" UserInfo={NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=(
"<cert(0x1053d2000) s: *.ecamzone.cc i: RapidSSL RSA CA 2018>",
"<cert(0x1053b4600) s: RapidSSL RSA CA 2018 i: DigiCert Global Root CA>"
), NSErrorClientCertificateStateKey=0, NSErrorFailingURLKey=https://139.196.20.65:443/eques/icvss/alarm-pic-down?uid=b512182503d8a4584c1f01c0668c81ff&token=0FMkyu6D2R0c_7b69aa95cd7d43f3b47b040e25221792&fid=AhKeAQACIQAvcGljLzE1LzIwMjAwNjI5L0N1V1k1QzBZZjFoMC5qcGcBAAAAAAE&devid=51c30d03f3564268bb34395e18769abc, NSErrorFailingURLStringKey=https://139.196.20.65:443/eques/icvss/alarm-pic-down?uid=b512182503d8a4584c1f01c0668c81ff&token=0FMkyu6D2R0c_7b69aa95cd7d43f3b47b040e25221792&fid=AhKeAQACIQAvcGljLzE1LzIwMjAwNjI5L0N1V1k1QzBZZjFoMC5qcGcBAAAAAAE&devid=51c30d03f3564268bb34395e18769abc, NSUnderlyingError=0x28377b960 {Error Domain=kCFErrorDomainCFNetwork Code=-1202 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x280b99f80>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9843, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9843, kCFStreamPropertySSLPeerCertificates=(
"<cert(0x1053d2000) s: *.ecamzone.cc i: RapidSSL RSA CA 2018>",
"<cert(0x1053b4600) s: RapidSSL RSA CA 2018 i: DigiCert Global Root CA>"
)}}, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <21B3A034-BFE5-4B71-B6A8-4B282C003E50>.<5>"
), _kCFStreamErrorCodeKey=-9843, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <21B3A034-BFE5-4B71-B6A8-4B282C003E50>.<5>, NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x280b99f80>, NSLocalizedDescription=此服务器的证书无效。您可能正在连接到一个伪装成“139.196.20.65”的服务器,这会威胁到您的机密信息的安全。} [-1202]
解决思路
分析一下错误,可以肯定是访问了使用自签证书的https请求,但是我们使用的是第三方的图片,验证证书是不可能了,那只有忽略验证。所以解决办法就是设置AlamofireImage忽略验证。
解决方法
AlamofireImage依赖于Alamofire,也就是说最终下载图片那一步,使用的是Alamofire,所以,设置Alamofire忽略验证即可。但由于AlamofireImage设置了自己的下载器,所以,解决方法如下:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 设置验证策略
let sessionManager = SessionManager(
configuration: ImageDownloader.defaultURLSessionConfiguration(),
serverTrustPolicyManager: ServerTrustPolicyManager(
policies: ["139.196.20.65": .disableEvaluation]
)
)
// 设置下载器
UIImageView.af_sharedImageDownloader = ImageDownloader(sessionManager: sessionManager)
......
return true
}
在AppDelegate中设置后,后续使用UIImageView.af_setImage()方法即可正常下载图片了。至此,问题解决。