POST请求无法在部分设备正常运行的原因排查(报No peer certificate)
这种情况我之前帮不少开发者排查过,结合你提到的设备分布(小米设备+旧版Android 4.2)和捕获到的No peer certificate错误,主要原因可以从这几个方面拆解:
Android 4.2的TLS版本兼容性硬伤
Android 4.2(API 17)系统默认只支持到TLS 1.0协议,而现在几乎所有正规服务器都已经禁用了不安全的TLS 1.0,强制使用TLS 1.1/1.2甚至更高版本。当你的应用在4.2设备上发起HTTPS请求时,双方无法完成TLS握手,服务器根本不会返回证书,自然就会抛出No peer certificate错误。小米MIUI系统的定制化安全逻辑影响
小米的MIUI系统做了不少安全层面的定制,部分旧款小米设备可能存在证书存储异常,或者系统对HTTPS请求的证书校验逻辑有特殊处理。有时候哪怕服务器证书是完全合法的,这类设备也无法正确识别和加载证书,导致握手失败触发错误。另外,有些旧MIUI版本可能默认关闭了高版本TLS协议的支持,和服务器的协议不匹配也会引发这个问题。服务器证书链配置不完整
还有一种常见情况是你的服务器配置的证书链不完整,缺少必要的中间证书。新版本系统和大多数设备会自动补全缺失的中间证书,但Android 4.2和部分定制化系统(比如旧MIUI)没有这个自动补全的能力,无法验证服务器证书的合法性,最终也会抛出No peer certificate错误。
如果要验证这些原因,你可以先检查服务器支持的TLS版本,或者尝试在Android 4.2设备上通过引入ProviderInstaller来升级TLS支持,同时确认服务器的证书链是否完整。
内容的提问来源于stack exchange,提问作者Nikolay Kolomiytsev

