开发中遇到了安卓7.0系统需要配置HTTPS的需求,使用okhttp进行相应设置后,在webview页面加载HTTPS页面,不成功,爆出了如下错误:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found
尝试了网上的的解决办法,无效!网上有一种方案是接受服务端的所有证书,但是自己已经制作了自签名的证书,且在PC端和IOS端均无问题,能确认不是证书的问题,因此不想采用这种方案。PS:总有种不安全的感觉,,,
继续尝试,偶然一次下载了服务端的根证书,双击打开了,发现能安装到安卓系统中,在此运行,访问HTTPS的连接,竟然通过了。但总不能让用户去手动下载安装证书的。
于是,翻墙谷歌查找答案。在按照官方的开发文档中找到到了如下内容
验证服务器证书的常见问题
假设没有从 getInputStream() 接收内容,将引发异常:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
出现此情况的原因有很多,其中包括:
自己的证书是自签名的,肯定是属于这三类原因了。同时感觉官网列出的解决方案,和自己的代码基本一致,因此也放弃了这种解决方案,果断翻到下一页,发现了网络安全性配置文件这个东东。决定尝试一波
采用了信任附加CA这种方式
在RES目录下,新建xml文件夹,并新增配置文件 network_security_config.xml,如下
配置文件中第二项写<certificates src="user"/>或<certificates src="system" />均可
raw 目录下放置根证书
同时,需要在
AndroidManifest.xml 添加如下语句
即可在安卓7.0及以上系统中使用https了,PS:安卓7.0以下貌似不支持这种方式