工作中碰到的那些坑(一)-https网络连接错误

春节长假的最后一天,pm突然微信通知客户端线上版本登录不上去了。


于是赶紧进行如下测试

step1: 在安卓高版本(6.0)上,debug、sim、release环境上客户端工作正常。

step2: 安卓4.4版本,debug、sim环境上客户端工作正常,release环境上所有接口报网络请求出错。

step3: 安卓4.4版本,release环境换成http连接,工作正常。--说明是https连接出现了问题。

step4: 找测试同学询问是否在4.4上测试过客户端的release版本,得到的答复是当时测过没有问题,而且上线后一周都没有问题。

--说明问题是服务器端的证书有变动。


复习一下基本知识点:

1. https原理:   

     浏览器先向服务器取得公钥(证书),然后用公钥加密自己的私钥连同自己私钥加密的请求一并发送给服务器。
     服务器用自己的私钥解密得到浏览器的私钥,使用浏览器的私钥解密请求。然后再用浏览器的私钥加密response发送回服务。



2. 如果连接抓包工具(charles),https网络通信过程是怎样的呢?

client发送request,被抓包工具拦截(面对client,抓包工具充当server),把自己的crt发送给client,client验证crt后发送key给抓包工具。

同时抓包工具对于server,充当client,发送request,获得服务器的crt,验证以后发送自己的key给server。

server用抓包工具的key加密response后发送给抓包工具,抓包工具用自己的key解出response,再用client的key加密response发送给client。


在找服务器端、运维的小伙伴核实的过程中,我又对心中的疑问在网上进行了查询

问题一如果是服务器的证书出问题了,为什么安卓版本6.0的工作正常?
The reason this occur is the JVM/Dalvik haven't not confidence in the CA certificates in the system or in the user certificate stores. To fix this with Retrofit, If you are used okhttp, with another client it's very similar. You've to do: A). Create a cert store contain public Key of CA. To do this you need to launch next script for *nix. You need openssl install in your machine, and download from https://www.bouncycastle.org/ the jar bcprov-jdk16-1.46.jar. Download this version not other, the version 1.5x is not compatible with android 4.0.4.
就是android会逐渐添加一些CA的颁发机构到它的信任列表里边来,如果一个CA颁发机构是新的,那么在早期版本的安卓里边可能就不认,但是在新版本里边就可以直接使用了。

 ---从这我们推断出可能的原因是服务器更新了证书,而这个证书的颁发机构在android 5.0以上的版本里边都已经被信任了,但是在4.4以下的版本里边没有被信任。

问题二为什么4.4 release环境,连接charles以后,就工作正常?

---原因同问题一。charles的信任列表里有新证书的颁发机构。


问题的解决:

1. 运维同学先验证了证书没有变动。

2. 运维同学回忆春节前后的工作,想起来release环境的域名在春节期间进行了流量清洗。关掉流量清洗以后问题就解决了。


root cause分析:

如果release环境的域名进行了流量清洗,request访问release域名时会重定向到流量清洗公司的一个网址,这个网址会有一个证书,这个证书不在4.4版本的信任列表里,所以网络连接会出现错误。

对于高版本或者charles,这个证书在信任列表里,网络连接正常,流量清洗公司探测到这不是DDoS攻击,就会把链接重定向回我们公司的域名。


参考资料:

HTTPS 理论基础及其在 Android 中的最佳实践  http://android.jobbole.com/83787/?utm_source=blog.jobbole.com&utm_medium=relatedPosts

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装Windows 10上的Linux子系统是一种方便的方式,可以在Windows系统运行Linux应用程序。然而,在安装过程可能会遇到一些问题,下面是一些常见的和解决方法。 首先,确保计算机已更新到Windows 10的最新版本。然后,在控制面板打开“启用或关闭Windows功能”,找到“适用于Linux的Windows子系统”选项并勾选上。这将需要重新启动计算机。 安装完成后,可以从Microsoft Store下载所需的Linux发行版,如Ubuntu或Debian。但有时会发生下载失败的情况。解决方法是尝试使用其他网络连接,或者从官方网站下载所需的发行版,并手动安装。 安装后,打开“命令提示符”或“PowerShell”,输入命令“wsl”,按回车键以启动Linux子系统。然而,有时会遇到“无法启动服务”或“系统错误 2”的错误。这可能是由于Windows子系统服务未启动造成的。解决方法是按下Win+R键,打开运行对话框,输入“services.msc”后按回车键,找到“LxssManager”服务,并确保它正在运行。 另一个常见的问题是无法访问网络。在安装过程,Linux子系统会尝试自动配置网络设置,但有时会失败。解决方法是打开Linux子系统的终端,输入命令“sudo nano /etc/resolv.conf”来编辑DNS设置。将“nameserver”后面的IP地址更改为你的DNS服务器地址,并保存文件。然后,输入命令“sudo /etc/init.d/networking restart”以重启网络服务。 最后,一些应用程序在Linux子系统可能无法正常运行,主要是由于缺少必要的库或驱动程序。解决方法是安装所需的软件包,并确保你的硬件驱动程序更新到最新版本。 总结一下,安装Windows 10上的Linux子系统可能会遇到几个常见的问题,如下载失败、无法启动服务、无法访问网络和应用程序不运行等。通过检查Windows版本、手动安装发行版、确保服务运行、编辑网络设置和安装软件包等方法,可以解决这些问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值