小程序后台在k8s集群部署中出现的request:fail ssl hand shake error问题

最近负责公司一个小程序的后台开发,测试环境一切正常,上线之后跟前端几个同事试用,也运行正常。
但有同事反映用安卓机打开小程序时会无故卡死,debug模式打开后发现,为线上连接ssl tcp握手时出错。


题外话
由于后台使用的是java,证书的中间机构较新,需要解决:pkix path building failed 问题。
之前写的:
1. 解决PKIX path building failed :https://blog.csdn.net/u013753225/article/details/80259601
相关链接:
1. 彻底弄懂“PKIX path building failed”问题:https://www.cnblogs.com/huqiaoblog/p/8398009.html
2. Java 和 HTTP 的那些事(四) HTTPS 和 证书:http://www.aneasystone.com/archives/2016/04/java-and-https.html

k8s容器编排技术需要容器化技术支撑,后边使用 docker exec 启动一个新容器,通过keytool命令重新commit成一个新镜像,从而达到docker镜像中的jvm兼容新证书机构的目的。
完美解决 pkix path building failed 问题。


发现握手问题后,第一时间查了ingress controller相关tls配置:https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/tls.md,文中有一点引起了我的注意

nginx-ingress defaults to using TLS 1.2 only and a secure set of TLS ciphers.
For instance, TLS 1.1+ is only enabled by default from Android 5.0 on. At the time of writing, May 2018, approximately 15% of Android devices are not compatible with nginx-ingress's default configuration.

有百分之15%的安卓机不兼容默认tls配置,运维改动后,发现依旧存在握手问题

后边查了不少资料,比较有用的如:
1. request:fail错误(含https解决方案)(真机预览问题):https://blog.csdn.net/qq_27626333/article/details/53635564
2. 如何写中间证书:https://github.com/kubernetes/kubernetes/issues/24669
3. 中间证书配置指南:通过ssl证书检测网站:https://gist.github.com/bprashanth/176c76b8f713a1e88bfcff532fd1a5da

找到一些端倪,通过ssl证书检测网站:https://www.ssllabs.com/ssltest/analyze.html,查看到确实站点的证书链不全,所以重新生成了证书链给运维,重新生成 k8s 小程序应用的 Secret 后,错误基本解决。
暂时没发现有异常。

这里推荐另一个自动生成合成证书工具:https://www.myssl.cn/tools/downloadchain.html

你可能感兴趣的:(Java,k8s,docker)