在HTTPS使用证书
-
25-09-2019 - |
题
我写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密钥库工程测试是这种情况已经)
不隶属于 StackOverflow