java - 如何解决aosp中不允许的明文
问题描述
我知道明文默认被android禁用。我可以知道我可以在 aosp 中的哪个位置启用而不是添加所有带有网络配置文件的包吗?
通过添加以下行我可以在哪里允许?
cleartextTrafficPermitted="true
外部/okhttp/android/main/java/com/squareup/okttp/Handler
public static OkUrlFactory createHttpOkUrlFactory(Proxy proxy) {
OkHttpClient client = new OkHttpClient();
// Explicitly set the timeouts to infinity.
client.setConnectTimeout(0, TimeUnit.MILLISECONDS);
client.setReadTimeout(0, TimeUnit.MILLISECONDS);
client.setWriteTimeout(0, TimeUnit.MILLISECONDS);
// Set the default (same protocol) redirect behavior. The default can be overridden for
// each instance using HttpURLConnection.setInstanceFollowRedirects().
client.setFollowRedirects(HttpURLConnection.getFollowRedirects());
// Do not permit http -> https and https -> http redirects.
client.setFollowSslRedirects(false);
// Permit cleartext traffic only (this is a handler for HTTP, not for HTTPS).
client.setConnectionSpecs(CLEARTEXT_ONLY);
// When we do not set the Proxy explicitly OkHttp picks up a ProxySelector using
// ProxySelector.getDefault().
if (proxy != null) {
client.setProxy(proxy);
}
// OkHttp requires that we explicitly set the response cache.
OkUrlFactory okUrlFactory = new OkUrlFactory(client);
// Use the installed NetworkSecurityPolicy to determine which requests are permitted over
// http.
OkUrlFactories.setUrlFilter(okUrlFactory, CLEARTEXT_FILTER);
ResponseCache responseCache = ResponseCache.getDefault();
if (responseCache != null) {
AndroidInternal.setResponseCache(okUrlFactory, responseCache);
}
return okUrlFactory;
}
private static final class CleartextURLFilter implements URLFilter {
@Override
public void checkURLPermitted(URL url) throws IOException {
String host = url.getHost();
if (!NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(host)) {
throw new IOException("Cleartext HTTP traffic to " + host + " not permitted");
}
}
}
在任何应用程序中,如果我使用 http,我会收到错误,因为不允许到 124.60.5.6 的明文 HTTP 流量”;
那么除了在应用程序中进行更改之外,是否可以在 aosp 中进行更改?
解决方案
如果你这样做似乎就足够了
builder.setCleartextTrafficPermitted(true);
第 189 行似乎就足够了,因为您使用的是较旧的应用程序,这些应用程序可能没有任何网络配置并且只使用默认配置。
旧答案
我希望您已经完成了有关绕过安全功能的影响的功课。话虽如此,负责异常的类在带有包的框架中,android.security.net.config
而负责的类是NetworkSecurityConfig
.
在撰写此答案时,静态构建器类具有默认boolean mCleartextTrafficPermittedSet
设置为的属性。false
您可能必须将其默认设置为,true
这使得类getEffectiveCleartextTrafficPermitted()
中的方法NetworkSecurityConfig
返回mCleartextTrafficPermitted
,返回返回DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED
默认设置为true
流量将是
getEffectiveCleartextTrafficPermitted()
默认情况下返回mCleartextTrafficPermitted
返回。DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED
true
如果这一切都令人困惑,请setCleartextTrafficPermitted(true)
在创建构建器时调用构建器。
注意:我没有尝试过,只是通过来源并推断出上述内容。如果有问题,欢迎您尝试纠正我。
通过从@Shadow 更新进行编辑:
在 NetworkSecurityConfig 中,将布尔变量从 true 更改为 false。
//public static final boolean DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED = true;
public static final boolean DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED = false;
同样在 ManifestConfigSource 中,注释以下行,
/*boolean usesCleartextTraffic =
(mApplicationInfo.flags & ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC) != 0
&& mApplicationInfo.targetSandboxVersion < 2;*/
并直接应用为usesCleartextTraffic为true。
boolean usesCleartextTraffic =true;
推荐阅读
- mysql - 从 python mysql 连接器连接到 Amazon RDS mysql 时出现 SSL 连接错误
- reactjs - 不确定是什么在我的 ReactJS 项目中产生了这个输入错误
- java - Telegram-bot Java 中的 ScheduledThreadPoolExecutor
- google-apps-script - 如何锁定 Google 表格中的当前屏幕视图(使用 App 脚本或其他)?
- python - 将文件名作为 python 函数传入
- php - 在自定义网站上显示 Zabbix 图表
- c++ - 在素数c ++程序中不断出现浮点异常
- c# - 部署 UWP 应用程序时 SQL 错误 25 但调试时没有?
- c# - btnClicked 中使用的单选按钮
- google-sheets - 根据范围的第一个日期设置范围内的日期