Android网络安全配置疑问:<certificates src="system"/>是否安全及作用
关于Android Network Security Config中
<certificates src="system"/>的疑问解答 1. 该语句的具体含义
<certificates src="system"/>表示让应用信任Android系统预装的所有根CA证书——这些是全球主流权威CA机构颁发的根证书,Android出厂时默认信任它们,用于验证绝大多数正规HTTPS网站的证书合法性。
2. 添加该语句是否安全?
安全与否取决于你的业务场景:
- 如果你的服务器证书由权威CA(如Let's Encrypt、DigiCert等)签发,保留该标签完全安全,属于常规操作。
- 如果服务器使用自签证书或企业内部CA证书,同时保留
system意味着应用仍会信任所有系统默认根证书:若应用还需访问外部HTTPS站点,这个配置合理;若应用仅需访问内部服务器且想实现仅信任指定证书的严格校验,保留system会扩大信任范围,此时需确认@raw/cert是否为完整根CA证书,再决定是否移除。
3. 是否为正确的配置方式?
需结合需求和证书实际情况判断:
- 你移除该标签后报错的核心原因:
res/raw/cert中的证书不是完整的信任锚(根CA证书)——可能是服务器端证书或中间证书,验证服务器证书链时需依赖系统信任的根证书完成全链校验,因此必须保留system。 - 若目标是仅信任自定义证书,需将能直接验证服务器证书链的完整根CA证书放入
res/raw,再移除system,即可正常校验且更严格。 - 若应用需同时访问内部服务器(用自定义证书)和外部正规HTTPS站点,同时保留
<certificates src="@raw/cert"/>和<certificates src="system"/>是正确配置,两种场景的证书验证均可正常工作。
补充:移除system触发SSL异常的原因
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.错误说明:应用验证服务器证书链时,找不到被信任的根证书(信任锚)。仅指定@raw/cert无法作为信任锚完成全链验证,必须依赖系统根证书才能完成校验。
内容的提问来源于stack exchange,提问作者Harish Padmanabh
相关产品推荐
相关产品推荐

