Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 带有Android(Nougat)和客户端证书的SSL/HTTPS_Java_Android_Ssl_Certificate_Handshake - Fatal编程技术网

Java 带有Android(Nougat)和客户端证书的SSL/HTTPS

Java 带有Android(Nougat)和客户端证书的SSL/HTTPS,java,android,ssl,certificate,handshake,Java,Android,Ssl,Certificate,Handshake,情况: 我有一个Airwatch分期付款,它为客户机提供存储在用户私有CA存储中的私有“用户证书”。在建立到指定https Web服务器的SSL连接时,应使用证书 例如,当我尝试通过HTTPS和Chrome访问此Web服务器时,Chrome会找到客户端证书,并询问我是否要使用它(所以不是直接使用)。通过单击“确定”,我可以建立连接并查看站点 问题 在“最近的时代”,这可以通过向应用程序本身提供物理证书并在运行时加载(通过创建密钥库、信任管理器和自定义SSLContext)在自定义应用程序中解决,

情况: 我有一个Airwatch分期付款,它为客户机提供存储在用户私有CA存储中的私有“用户证书”。在建立到指定https Web服务器的SSL连接时,应使用证书

例如,当我尝试通过HTTPS和Chrome访问此Web服务器时,Chrome会找到客户端证书,并询问我是否要使用它(所以不是直接使用)。通过单击“确定”,我可以建立连接并查看站点

问题 在“最近的时代”,这可以通过向应用程序本身提供物理证书并在运行时加载(通过创建密钥库、信任管理器和自定义SSLContext)在自定义应用程序中解决,如前所述

我认为使用Android Nougat,我可以通过只配置此应用程序的证书所在位置来摆脱“变通方法”。它被称为网络安全配置,如下所述

所以我补充说:

android:networkSecurityConfig="@xml/network_security_config"
在Android清单中,添加了一个如下所示的XML

<network-security-config>
    <base-config>
        <!-- Trust ONLY the mydomain.com Domain and its Subdomains -->
       <domain includeSubdomains="true">mydomain.com</domain>
       <trust-anchors>
           <!-- Trust preinstalled CAs -->
            <certificates src="system"/>
            <!-- Additionally trust user added CAs -->
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
</network-security-config>
问题:

1) 我是否仍然需要创建自定义SSLContext并向自定义Trustmanager注入自定义密钥库?如果必须这样做,我如何获得用户证书?可以通过
KeyStore.getInstance(“AndroidCAStore”)轻松初始化Defautl系统CAs
但是如何从特定于用户的存储中获取密钥以在SSLContext中使用它们呢

3) 我在网上没有找到任何关于如何使用HttpsConnection和客户端证书的例子,这些证书存储在Android上的用户密钥库中,并带有Nougat或更高版本,有什么提示吗?

这应该有助于您阅读(注释和答案)?
javax.net.ssl.SSLHandshakeException: Handshake failed