Android network security configuration不生效,自定义SSLSocketFactory未校验证书排查
问题原因分析
1. 自定义SSLSocketFactory会绕过系统网络安全配置
Android系统的networkSecurityConfig配置仅对使用系统默认SSLSocketFactory的网络请求生效(包括原生HttpsURLConnection、未自定义SSL配置的OkHttp等场景)。你自行实现了SSLSocketFactory并自定义初始化SSLContext,相当于完全接管了SSL证书校验逻辑,系统层面的证书钉扎、域名限制配置自然不会生效。
2. 代码存在明确逻辑缺陷
你代码中定义的TrustManager变量名为trustManager,但在sslContext.init方法中传入的是未定义的tm变量,若实际运行时代码未修正该问题,要么会触发编译错误,要么是你实际传入了不做任何校验的空信任管理器:
- 常见的
NaiveTrustManager实现通常会空置所有证书校验方法,不会对非法证书、域名抛出异常 - 若你使用的
EasyX509TrustManager实现不完善,也可能存在未校验证书链、未校验域名的问题
3. 未自行实现证书钉扎逻辑
networkSecurityConfig中的pin-set证书钉扎规则,是系统默认SSLSocketFactory内部实现的校验逻辑。你自定义SSL链路时没有额外实现公钥哈希比对逻辑,哪怕配置的pin值错误,也不会触发校验失败。
4. 缺少域名校验步骤
你仅重写了createSocket方法,没有在Socket握手完成后执行域名合法性校验,也没有关联系统默认的HostnameVerifier逻辑,因此访问错误域名时不会触发校验异常。
内容的提问来源于stack exchange,提问作者Monica
相关产品推荐
相关产品推荐

