Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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
如何使来自Android应用程序的所有HTTP请求接受给定的证书颁发机构?_Android_Https_Ssl Certificate_Certificate Authority - Fatal编程技术网

如何使来自Android应用程序的所有HTTP请求接受给定的证书颁发机构?

如何使来自Android应用程序的所有HTTP请求接受给定的证书颁发机构?,android,https,ssl-certificate,certificate-authority,Android,Https,Ssl Certificate,Certificate Authority,我有一台运行HTTPS的服务器,服务器上有来自我自己的证书颁发机构的证书。我将CA证书作为.pem文件(例如,我可以通过--cacert将其传递给CURL,以使其与我的服务器通信) 我正在编写一个Android应用程序,它需要与这个服务器进行通信。我需要能够以某种方式将此PEM文件提供给它,以便它能够接受由我的CA签署的证书。此应用程序在专用硬件上以特权模式运行,并且不可能让用户通过Android设置UI添加证书本身,就像您可能为传统应用程序所做的那样。我需要在Java中以编程方式添加CA,如果

我有一台运行HTTPS的服务器,服务器上有来自我自己的证书颁发机构的证书。我将CA证书作为
.pem
文件(例如,我可以通过
--cacert
将其传递给CURL,以使其与我的服务器通信)

我正在编写一个Android应用程序,它需要与这个服务器进行通信。我需要能够以某种方式将此PEM文件提供给它,以便它能够接受由我的CA签署的证书。此应用程序在专用硬件上以特权模式运行,并且不可能让用户通过Android设置UI添加证书本身,就像您可能为传统应用程序所做的那样。我需要在Java中以编程方式添加CA,如果更容易的话,也可以在部署时添加CA(该软件作为完整的Android版本部署)

我希望能够在一个地方添加CA,然后从应用程序发出的任何HTTPS请求都将接受CA,无论它们使用的是哪个库或客户端。我不想通过整个应用程序配置每个请求来接受CA,我们使用了几个库,我不想弄清楚如何配置每个库

请注意,我不需要整个设备来信任CA,只需要我的应用程序

这可能吗?

根据,网络安全配置功能使用一个XML文件,您可以在其中指定应用程序的设置。您必须在应用程序清单中包含指向此文件的条目。下面从清单中摘录的代码演示了如何创建此条目:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

...
res/xml/network\u security\u config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

example.com
将您的PEM证书文件添加到res/raw/my_ca。

根据,网络安全配置功能使用XML文件,您可以在其中指定应用程序的设置。您必须在应用程序清单中包含指向此文件的条目。下面从清单中摘录的代码演示了如何创建此条目:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

...
res/xml/network\u security\u config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

example.com

将您的PEM证书文件添加到res/raw/my_ca。

不幸的是,这需要API级别24,而我在21上。@较旧的设备将忽略此配置。在具有API 24+ist的设备上将有效。唯一的替代方法是实现自定义TrustManager并使用自定义信任存储初始化它:您也可以检查这一点。不幸的是,这需要API级别24,而我在21上。@较旧的设备将忽略此配置。在具有API 24+ist的设备上将有效。唯一的替代方法是实现一个定制的TrustManager,并用一个定制的信任存储初始化它:您也可以检查这一点