安卓7.0及以上配置HTTPS单向认证

    开发中遇到了安卓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的连接,竟然通过了。但总不能让用户去手动下载安装证书的。

于是,翻墙谷歌查找答案。在按照官方的开发文档中找到到了如下内容

安卓7.0及以上配置HTTPS单向认证_第1张图片

验证服务器证书的常见问题

假设没有从 getInputStream() 接收内容,将引发异常:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

出现此情况的原因有很多,其中包括:

颁发服务器证书的 CA 未知

服务器证书不是由 CA 签署的,而是自签署

服务器配置缺少中间 CA

自己的证书是自签名的,肯定是属于这三类原因了。同时感觉官网列出的解决方案,和自己的代码基本一致,因此也放弃了这种解决方案,果断翻到下一页,发现了网络安全性配置文件这个东东。决定尝试一波

采用了信任附加CA这种方式

安卓7.0及以上配置HTTPS单向认证_第2张图片

在RES目录下,新建xml文件夹,并新增配置文件    network_security_config.xml,如下

配置文件中第二项写均可

安卓7.0及以上配置HTTPS单向认证_第3张图片

raw 目录下放置根证书


安卓7.0及以上配置HTTPS单向认证_第4张图片

同时,需要在

AndroidManifest.xml 添加如下语句

安卓7.0及以上配置HTTPS单向认证_第5张图片

即可在安卓7.0及以上系统中使用https了,PS:安卓7.0以下貌似不支持这种方式

你可能感兴趣的:(安卓7.0及以上配置HTTPS单向认证)