我写Android应用程序。 我怎么可以使用证书https连接,当我从目录文件初始化证书,而不是从包?

当我有密码包文件时,此代码的工作:     

    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    keyStore.load(certificateIs, pass.toCharArray());
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(keyStore, pass.toCharArray());
    SSLContext sc = SSLContext.getInstance("TLS");
    sc.init(kmf.getKeyManagers(), trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

但我已经从证书DER文件初始化:

    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    X509Certificate certificate = (X509Certificate) cf.generateCertificate(certBytes);

我不知道如何使用此证书在https连接。

有帮助吗?

解决方案

您似乎在谈论客户端证书身份验证(其中你的Android设备为客户端)。

首先,你需要在客户端的私钥匹配你想使用证书中的公共密钥(这是整点,否则,它不会验证任何东西)。 PKCS#12是通常的格式包含私钥和证书之一。如果你只有一个的的文件,你可能不会有私人在它密钥的证书,因此它不会工作。 它并不完全从你的问题,你做什么你certificate变量,关于KeyManagerFactory清除(如果你有一个自定义X509KeyManager,它应该返回其getPrivateKey方法的私有密钥,否则将无法正常工作)。

其次,客户端证书身份验证总是由服务器发起的,所以你需要进行相应的设置过于服务器(看来,如果基于一个PKCS#12密钥库工程测试是这种情况已经)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top