Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解析aosp中不允许的明文_Java_Android_Https_Android Source_Cleartext - Fatal编程技术网

Java 如何解析aosp中不允许的明文

Java 如何解析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

我知道android默认禁用了cleartext。我可以知道我可以在aosp中启用的确切位置,而不是添加所有带有网络配置文件的包吗

在哪里我可以通过添加下面的行来允许

ClearTextTrafficAllowed=“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,我会得到错误,因为明文http流量达到124.60.5.6,这是不允许的”


因此,除了在应用程序中进行更改,是否可以在aosp中进行更改

您需要转到
AndroidManifest.xml
并添加


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

builder.setCleartextTrafficPermitted(true);
第189行似乎足够了,因为您使用的是旧的应用程序,它可能没有任何网络配置,只使用默认配置

资料来源:


旧答案 我希望您已经完成了关于绕过安全功能的影响的家庭作业。也就是说,负责异常的类是在框架中的包
android.security.net.config
,负责异常的类是
NetworkSecurityConfig

在编写此答案时,静态生成器类有一个属性
boolean mCleartextTrafficPermittedSet
,默认设置为
false
。您可能必须将其默认为
true
,这使得
NetworkSecurityConfig
类return
mcleartexttrafficallowed
中的方法
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;