美文网首页Android
安卓7.0及以上配置HTTPS单向认证

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

作者: 斌宝滴美美哒霞 | 来源:发表于2017-12-26 19:46 被阅读49次

        开发中遇到了安卓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 未知

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

    服务器配置缺少中间 CA

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

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

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

    配置文件中第二项写<certificates src="user"/>或<certificates src="system" />均可

    raw 目录下放置根证书

    同时,需要在

    AndroidManifest.xml 添加如下语句

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

    相关文章

      网友评论

      • 昨日d书生:我按照你说的添加了,表示并没有作用阿

      本文标题:安卓7.0及以上配置HTTPS单向认证

      本文链接:https://www.haomeiwen.com/subject/ueesgxtx.html