ssl/https与android(nougat)和客户端证书

7kjnsjlb  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(230)

情境:我有一个airbatch分期付款,它为客户机提供存储在用户私有ca存储区中的私有“用户证书”。当建立到指定https Web服务器的ssl连接时,应该使用这些证书。
e、 当我试图通过https和chrome访问这个Web服务器时,chrome会找到客户端证书并询问我是否要使用它(所以不是直接使用)。单击“确定”我可以建立连接并查看站点。
“最近一段时间”中的问题可以在自定义应用程序中解决,方法是向应用程序本身提供物理证书,并在运行时加载它(通过创建密钥库、信任管理器和自定义sslcontext),如本文所述
我认为使用androidnougat,我可以通过只配置这个应用的证书所在的位置来摆脱“变通方法”。它被称为网络安全配置,如下所述https://developer.android.com/training/articles/security-config.html
所以我补充说:

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>

我认为使用httpsurlconnection会在必要时自动使用用户证书。
当前情况:我仍然得到这个:

javax.net.ssl.SSLHandshakeException: Handshake failed

问题:
1) 我还需要创建一个自定义sslcontext并向一个自定义trustmanager注入一个自定义密钥库吗?如果必须这样做,如何获得用户证书?定义系统cas可以通过 KeyStore.getInstance("AndroidCAStore"); 但是如何从用户特定的存储中获取密钥以在sslcontext中使用它们呢?
3) 我在网上找不到任何例子,如何使用httpsconnection和客户端证书,这些证书存储在android上nougat或更高版本的用户密钥库中,有什么提示吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题