一:前言
项目安全升级,使用https协议,老板不出钱,只能使用自签名证书的方式,发现Filedownload 无法下载文件,报错:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 大致意思:信任锚认证路径找不到。
二:问题分析
自签名证书没有经过CA认证,肯定会抛此异常,没办法,谁让用的是自签名的证书呢, 只能先忽略SSL认证,开始找FileDownload忽略SSL验证的相关接口,百度一圈无果,难道没人遇到这样的问题吗?
三:解决方案:
经过求助作者得到以下答案:
有思路了, 哐哐哐就是一顿干,实现了FileDownloadConnection的接口,写了一个自己的FileDownloadUrlConnection
满心欢喜的验证结果,结果不出意外, 没有生效。是我写的不对? 仔细查看lssues,发现了新大陆
作者自己有实现过FileDownloadUrlConnection, 使用的是okhttp(默认是httpurlconnection),赶紧拿来试试,先下载一个http的链接,叮!!!成功了。赶紧添加忽略SSL的代码,换成https 的链接试试,好的,成功。。
方案总结:
1. 使用作者实现的OkHttp3Connection替换FileDownload的默认连接方式(httpurlconnection)
2. 在创建okhttp实例的时候添加忽略SSL验证的代码
3. 使用FileDownloader.setupOnApplicationOnCreate(this).connectionCreator(....)的方式注册FileDownload