如何在android上使用已安装的用户证书创建SSL连接

如何在android上使用已安装的用户证书创建SSL连接,android,ssl-certificate,openvpn,android-security,Android,Ssl Certificate,Openvpn,Android Security,我们正在使用用户证书进行从移动应用程序到F5服务器的身份验证。我们已经使用一个测试证书测试了这个过程,我们安装并创建了一个密钥库,用于创建SSLContext对象。对于生产,我们使用MDM在android设备上动态创建并安装用户证书。我认为这是将证书放入/data/misc/keystore位置。我们面临的问题是无法访问此用户证书并使用它创建SSLContext 在我们的测试中,我们通过安装OpenVPN for Android验证了证书是否在设备上。证书显示在OpenVPN中的Android证

我们正在使用用户证书进行从移动应用程序到F5服务器的身份验证。我们已经使用一个测试证书测试了这个过程,我们安装并创建了一个密钥库,用于创建SSLContext对象。对于生产,我们使用MDM在android设备上动态创建并安装用户证书。我认为这是将证书放入/data/misc/keystore位置。我们面临的问题是无法访问此用户证书并使用它创建SSLContext

在我们的测试中,我们通过安装OpenVPN for Android验证了证书是否在设备上。证书显示在OpenVPN中的Android证书下,但需要用户选择它(这不是我们的应用程序的选项,我们需要通过编程方式获取证书)

我们所发现的一切要么涉及CA证书(我们可以访问),要么拥有.cer或.pfx文件并安装和创建密钥库,就像我们使用测试证书一样

在创建SSLContext时,是否有方法访问用户安装的证书

我们的Android版本是4.1.2(API 16)

我们是android开发新手,如有任何指导,我们将不胜感激

谢谢


Mike

使用类似以下的方法如何:

SSLContext sslContext 
    = SSLConnections.getSSLContext(keyStoreFile, keyStoreFilePassword);
httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory());

您还可以查看一下

为了访问存储在设备密钥库中的用户凭据,您需要获得用户的权限。 具体来说,您需要调用其中一个KeyChain.choosePrivateKeyAlias()(请参阅)。 获得别名后(将在KeyChainAlias回调中获得),您可以使用(从活动或服务中):


@迈克,这就是你要找的吗?
PrivateKey key = KeyChain.getPrivateKey(this, alias);
X509Certificate[] chain = KeyChain.getCertificateChain(this, alias);