标签: android-network-security-config

如何在Android(9)Pie中允许所有网络连接类型HTTP和HTTPS?

从Android 9 Pie开始,没有加密的请求永远不会起作用.默认情况下,系统会指望您默认使用TLS.您可以在此处阅读此功能因此,如果您只通过HTTPS发出请求,那么您就是安全的.但是那些通过不同网站提出请求的应用程序呢,例如类似浏览器的应用程序.

如何在Android 9 Pie中启用对HTTP和HTTPS的所有类型连接的请求?

java android kotlin android-network-security-config android-9.0-pie

100
推荐指数
6
解决办法
5万
查看次数

androidTest 中的网络安全配置被忽略

我的应用程序有免费和付费两种版本。现在,我们正在向在模拟服务器中运行的付费风格添加测试,我们需要以明文方式与其进行通信,因此尝试仅在 androidTestPaid 中添加网络安全配置(我们在主源根目录中没有) 。不幸的是,该配置似乎被完全忽略了。

androidTestPaid/AndroidManifest.xml

<manifest ...>
    <application
        tools:node="merge"
        android:networkSecurityConfig="@xml/network_security_config"
        android:usesCleartextTraffic="true"
        ... />
    </application>
    <instrumentation android:name="...CustomTestRunner" ... />
</manifest>
Run Code Online (Sandbox Code Playgroud)

androidTestPaid/res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">127.0.0.1</domain>
    </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

在我们的 gradle 文件中,我们不会对特定于风味的 Android 测试的源集执行任何操作,但我们会对基本 Android 测试执行任何操作。这会导致问题吗?

构建.gradle

android {
    sourceSets {
         androidTest {
            java.srcDirs = ['src/androidTest/java', 'src/testShared/java']
            testOptions {
                animationsDisabled = true
            }
         }
         ... 
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)

什么会阻止我们的测试中采用此配置?

android android-network-security-config

9
推荐指数
0
解决办法
727
查看次数

无法从网络安全配置 XML 引用原始资源

我正在尝试按照此处使用自定义证书的 Android 文档进行操作。所需的网络配置文件是:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="@raw/extracas"/>
            <certificates src="system"/>
        </trust-anchors>
    </base-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

我已经创建了 network_security_config.xml 并将引用 a 添加ndroid:networkSecurityConfig="@xml/network_security_config"到我的清单中。我有需要包含的 .crt 文件,但我有两个问题:

  1. 我无法在我的原始文件夹中创建目录,当我这样做时,它会在我的文件系统中创建目录,但不在项目中的原始资源目录中。

  2. 代替目录,我只是直接在原始文件夹中引用我的 .crt 文件,但是当我尝试引用证书时,这是我的 network_security_config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config>
            <trust-anchors>
                <certificates src="@raw/cert_cubic_trusted_ca-sha256.crt"/>
                <certificates src="system"/>
            </trust-anchors>
        </base-config>
    </network-security-config>
    
    Run Code Online (Sandbox Code Playgroud)

我得到一个红色波浪线,错误“缺少 src 资源。”,当我尝试构建时,构建日志输出错误:

AGPBI: {"kind":"error","text":"error: resource raw/certname.crt (aka com.comname.appname:raw/certname.crt) not found.","sources":[{"file":"/Users/205314/project/appname/app/src/main/res/xml/network_security_config.xml","position":{"startLine":5}}],"original":"","tool":"AAPT"}
:app:processDebugResources
:app:processDebugResources FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugResources'.
> Failed to process resources, see …
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-xml android-gradle-plugin android-network-security-config

6
推荐指数
1
解决办法
1436
查看次数

如何在 network_security_config.xml 中包含 BuildConfig 或资源

为了在 Android 中的本地主机上进行 http-API 调用,我需要添加一个网络安全配置来定义我的本地 IP 地址。当然,每个开发者的本地IP地址都是不同的,所以我把这个值放进去,gradle.properties这样每个人都可以自己覆盖它。但是,我还没有找到如何将该值包含在文件中network-security-config.xml。我尝试创建 abuildConfigFieldresValuein build.gradle,但两者似乎都不起作用。我能做些什么?

网络安全配置.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <!-- We are allowed to call localhost on http instead of https:
        /sf/ask/3215860301/ -->
        <domain includeSubdomains="true">LOCALHOST</domain>
    </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

应用程序/build.gradle

buildTypes {
    debug {
        buildConfigField "String", "LOCALHOST", localIpAddress
        resValue "string", "LOCALHOST", localIpAddress
    }
}
Run Code Online (Sandbox Code Playgroud)

gradle.properties

localIpAddress="IP_ADDRESS_HERE"
Run Code Online (Sandbox Code Playgroud)

network_security_config.xml也欢迎任何其他如何优雅地包含我的本地 IP 地址的解决方案!

android localhost android-build-type android-network-security-config

6
推荐指数
0
解决办法
881
查看次数

Flutter:Android“网络安全配置”

为了实现证书锁定,我根据Android 文档进行了以下设置来测试 Flutter 的网络安全性

请注意,我指定了domain-configfor api.somesite.com。所以应用程序应该只接受somesite.com证书。

请注意,android:networkSecurityConfig="@xml/network_security_config"AndroidManifest.xml.

为了测试固定证书,我对两个端点进行了两次 HTTP 调用。一个来自api.somesite.com,另一个是随机api。

但是,两个 API 端点都使用网络安全设置工作。

我不确定我做错了什么,以及为什么按照 Android 文档固定证书似乎对颤振本身没有任何影响。

任何帮助将非常感激。

android flutter android-network-security-config

5
推荐指数
1
解决办法
2525
查看次数

Android WebView 加载失败 (net::ERR_CLEARTEXT_NOT_PERMITTED)

有人能帮助我吗?我在我的 Android 应用程序中使用 WebView

compileSdkVersion 29
buildToolsVersion "29.0.0"
minSdkVersion 16
targetSdkVersion 29
Run Code Online (Sandbox Code Playgroud)

我在 AmdroidManifest 中有配置 https 并创建了一个配置文件但没有更改我收到明文错误:

(净::ERR_CLEARTEXT_NOT_PERMITTED)

@xml/network_security_config

  <?xml version="1.0" encoding="utf-8"?>
  <network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">www.mydomaine.com</domain>
  </domain-config>
  </network-security-config>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

    <manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
   <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:hardwareAccelerated="true"
    android:networkSecurityConfig="@xml/network_security_config"
    android:usesCleartextTraffic="true"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
Run Code Online (Sandbox Code Playgroud)

WabView 类

    public void LoadWeb() {
    webView = (WebView) findViewById(R.id.webview_test);
    webView.getSettings().setAppCacheEnabled(false);
    webView.clearCache(true);
    webView.reload();
    webView.getSettings().setJavaScriptEnabled(false);
    webView.getSettings().setLoadsImagesAutomatically(true);
        webView.loadUrl("https://www,mydomaine.com");
    swipe.setRefreshing(true);
    webView.setWebViewClient(new WebViewClient() {


        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, …
Run Code Online (Sandbox Code Playgroud)

java android android-webview android-network-security-config

2
推荐指数
1
解决办法
2772
查看次数

在不忽略 SSL 错误的情况下,android web 视图中握手失败 SSL 错误的最佳解决方案

我创建了一个向用户显示特定站点的应用程序,我正在使用 Web 视图来完成该任务。当我尝试加载该特定站点的 web 视图时,什么也没有显示,日志 cat 说,

E/chromium: [ERROR:ssl_client_socket_impl.cc(946)] 握手失败;返回 -1,SSL 错误代码 1,net_error -202

因此,经过一番搜索后,我发现这个答案可以忽略此 SSL 证书错误,并使用以下代码我可以加载该站点。

webView.setWebViewClient(new WebViewClient() {  
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {              
        handler.proceed();
        Log.d("ssl_error", error.toString());                
    }
});
Run Code Online (Sandbox Code Playgroud)

当我发送error.toString()给 log cat 时,它说,

主要错误:3 证书:颁发给:[该特定站点的公司的一些详细信息] 颁发者:CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US;在 URL: [那个特定的站点 url]

但是我想在不忽略它的情况下修复该错误。

正如前面提到的堆栈溢出答案一样,我无法匹配https://developer.android.com/training/articles/security-config的详细信息来解决这个问题而不忽略它。我应该如何配置网络来解决这个问题?

注意:- 我只想在一个特定站点上工作。无需与任何网站合作

java ssl android webview android-network-security-config

1
推荐指数
1
解决办法
2753
查看次数

在运行时将network_security_config.xml的域名设置为localhost

从 Android 9 开始,Android 默认情况下仅允许通过 HTTPS 进行网络连接。然而,我正在做的唯一请求是通过本地主机(例如http://10.41.199.226:port/FooBar)完成的,该本地主机由HttpListener侦听该地址:端口组合的(C#)处理。

由于此请求是通过 HTTP 发出的,因此 Android 默认情况下不允许这样做。按照Android 关于该文件的文档,network_security_config我可以通过添加以下network_security_config.xml文件来允许 HTTP 连接

<?xml version="1.0" encoding="utf-8"?>
 <network-security-config>
   <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

这是使用 Android 清单调用的android:networkSecurityConfig="@xml/network_security_config"

这允许完成 HTTP 请求,但是因为这设置了基本配置,所以允许在整个应用程序中发出 HTTP 请求。这不是一个好主意,因为我将来可能想添加传出请求,我希望通过 HTTPS 发送请求,并且希望为此建立安全网。让这成为一条不可行的道路。

在同一文档中,他们进一步介绍了domain-config允许您根据域进行设置的功能cleartextTrafficPermitted,我尝试使用以下域集进行设置

<?xml version="1.0" encoding="utf-8"?>
 <network-security-config>
    <domain-config cleartextTrafficPermitted="true">
      <domain includeSubdomains="true">127.0.0.1</domain>
      <domain includeSubdomains="true">10.0.0.1</domain>
      <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

由于没有结果,请求仍然因不是 https …

https android http android-manifest android-network-security-config

0
推荐指数
1
解决办法
1万
查看次数