如何配置Android应用禁止HTTP流量,仅允许HTTPS访问?
配置Android应用仅允许HTTPS流量的完整方案
1. 配置AndroidManifest.xml
直接在<application>标签中显式禁用明文HTTP流量,这是最基础的安全控制:
<application ... android:usesCleartextTraffic="false" android:networkSecurityConfig="@xml/network_security_config"> ... </application>
android:usesCleartextTraffic="false":Android 9及以上默认禁用明文流量,但显式声明能兼容更低版本(Android 7+)并明确安全策略。- 必须保留
<uses-permission android:name="android.permission.INTERNET" />,HTTPS流量依然需要网络权限。
2. 配置network_security_config.xml
在res/xml目录下创建该文件,进一步强化全局HTTPS强制策略:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- 全局基础配置 --> <base-config cleartextTrafficPermitted="false"> <trust-anchors> <!-- 信任系统预装CA证书,适配所有合法第三方HTTPS API --> <certificates src="system" /> <!-- 若需信任自定义CA(如内部测试环境),可添加此行,否则删除 --> <!-- <certificates src="@raw/custom_ca" /> --> </trust-anchors> </base-config> <!-- 可选:针对特定域名的精细化配置(如有特殊需求) --> <!-- <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">example.com</domain> </domain-config> --> </network-security-config>
cleartextTrafficPermitted="false":全局禁止所有明文HTTP请求。- 信任系统CA证书足以覆盖绝大多数正规第三方HTTPS API的证书验证需求。
3. 额外加固:客户端拦截器(以OkHttp为例)
如果需要彻底杜绝代码中误写的HTTP请求,可在网络客户端中添加拦截器强制校验协议:
val okHttpClient = OkHttpClient.Builder() .addInterceptor { chain -> val request = chain.request() if (request.url.scheme != "https") { throw IllegalStateException("HTTP请求已被禁止,请使用HTTPS协议") } chain.proceed(request) } .build()
该拦截器会在请求发起前检查协议,一旦发现HTTP请求直接抛出异常,从代码层面阻断非法请求。
注意事项
- 确保所有第三方API的HTTPS证书合法且受系统信任,避免出现证书验证失败导致的请求错误。
- 若需兼容Android 6及以下版本,需保证应用Target SDK版本不低于26,或在
network_security_config中添加兼容配置(目前这类旧版本占比极低)。
内容的提问来源于stack exchange,提问作者toto_tata
相关产品推荐
相关产品推荐

