Java 如何解析aosp中不允许的明文
我知道android默认禁用了cleartext。我可以知道我可以在aosp中启用的确切位置,而不是添加所有带有网络配置文件的包吗 在哪里我可以通过添加下面的行来允许 ClearTextTrafficAllowed=“true 外部/okhttp/android/main/java/com/squareup/okttp/HandlerJava 如何解析aosp中不允许的明文,java,android,https,android-source,cleartext,Java,Android,Https,Android Source,Cleartext,我知道android默认禁用了cleartext。我可以知道我可以在aosp中启用的确切位置,而不是添加所有带有网络配置文件的包吗 在哪里我可以通过添加下面的行来允许 ClearTextTrafficAllowed=“true 外部/okhttp/android/main/java/com/squareup/okttp/Handler public static OkUrlFactory createHttpOkUrlFactory(Proxy proxy) { OkHttpC
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,我会得到错误,因为明文http流量达到124.60.5.6,这是不允许的”
因此,除了在应用程序中进行更改,是否可以在aosp中进行更改 您需要转到
AndroidManifest.xml
并添加
如果你这样做,似乎就足够了
builder.setCleartextTrafficPermitted(true);
第189行似乎足够了,因为您使用的是旧的应用程序,它可能没有任何网络配置,只使用默认配置
资料来源:
旧答案
我希望您已经完成了关于绕过安全功能的影响的家庭作业。也就是说,负责异常的类是在框架中的包android.security.net.config
,负责异常的类是NetworkSecurityConfig
在编写此答案时,静态生成器类有一个属性boolean mCleartextTrafficPermittedSet
,默认设置为false
。您可能必须将其默认为true
,这使得NetworkSecurityConfig
类returnmcleartexttrafficallowed
中的方法geteffectivecleartexttrafficallowed()
默认设置为true
流量将是
getEffectiveClearTextTrafficAllowed()
返回MCLearTextTrafficAllowed
返回DEFAULT\u CLEARTEXT\u TRAFFIC\u allowed
默认返回true
如果这一切都令人困惑,那么在创建生成器时,在生成器上调用setClearTextTrafficAllowed(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;*/
如果我有1000个应用程序,我无法通过创建此网络配置xml应用所有应用程序。取而代之的是,是否可以在框架端执行此操作?我有9的完整aosp源代码。正如android所建议的,它在默认情况下已被禁用。他们在aosp中禁用的具体位置?这是否意味着如果你有1000个应用程序,并且他们对框架进行了一些更新,你也必须对其进行更改?问题是我们需要将应用程序从6个迁移到9个。所以在这种情况下,与其在每个应用程序中都进行更改,不如在框架中进行更改。例如:9年引入的后台服务限制。在这种情况下,不是将其作为前台服务添加到每个应用程序中,而是有一个名为BackgroundExecutionQueue的类进行更改,以允许后台服务不受限制。在这种情况下也是一样,我不知道他们禁用的具体位置。我不知道如何更改AOSP,但我不建议您可能会遇到多重障碍,第三种选择是为您的网站使用证书,在这种情况下,您不必处理clearTextTraffic
问题是它的局域网连接。因此,它与局域网通信,并通过局域网连接,访问控制器的互联网。所以在这种情况下,LAN没有https或http。谢谢vijai,这是我所期望的。让我试试这个,很快就会给你更新。再次感谢@维贾伊用了这个。builder.setClearTextTrafficAllowed(true);而不是//builder.setClearTextTrafficAllowed(ClearTextTrafficAllowed);但我仍然得到不支持的明文http流量。实际上,我在getDefaultBuilder方法中也打印了日志,但没有打印任何内容。嗯。。。那么它可能在这里?注意:文件是ManifestConfigSource.java,那么我实际上需要做什么呢?请引导我@Vijai
boolean usesCleartextTraffic =true;