首页 > 解决方案 > 如何解决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 中进行更改?

标签: javaandroidhttpsandroid-sourcecleartext

解决方案


如果你这样做似乎就足够了

builder.setCleartextTrafficPermitted(true);

第 189 行似乎就足够了,因为您使用的是较旧的应用程序,这些应用程序可能没有任何网络配置并且只使用默认配置。

来源:https ://android.googlesource.com/platform/frameworks/base.git/+/refs/heads/master/core/java/android/security/net/config/NetworkSecurityConfig.java#189


旧答案

我希望您已经完成了有关绕过安全功能的影响的功课。话虽如此,负责异常的类在带有包的框架中,android.security.net.config而负责的类是NetworkSecurityConfig.

在撰写此答案时,静态构建器类具有默认boolean mCleartextTrafficPermittedSet设置为的属性。false您可能必须将其默认设置为,true这使得类getEffectiveCleartextTrafficPermitted()中的方法NetworkSecurityConfig返回mCleartextTrafficPermitted,返回返回DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED默认设置为true

流量将是

getEffectiveCleartextTrafficPermitted()默认情况下返回mCleartextTrafficPermitted返回。DEFAULT_CLEARTEXT_TRAFFIC_PERMITTEDtrue

如果这一切都令人困惑,请setCleartextTrafficPermitted(true)在创建构建器时调用构建器。

该类的源代码可在此处获得:https ://android.googlesource.com/platform/frameworks/base.git/+/refs/heads/master/core/java/android/security/net/config/NetworkSecurityConfig.java

注意:我没有尝试过,只是通过来源并推断出上述内容。如果有问题,欢迎您尝试纠正我。

通过从@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;

推荐阅读