[英]using Certificate in https
我写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是包含私钥和证书的常用格式之一。 如果你只有一个DER文件中的证书,你可能不会有它的私钥,因此它不会工作。 从你的问题来看,你对certificate
变量的处理方式并不十分清楚,就KeyManagerFactory
(如果你有一个自定义的X509KeyManager
,它应该在其getPrivateKey
方法中返回私钥,否则它将无法工作)。
其次,客户端证书身份验证始终由服务器启动,因此您也需要相应地设置服务器(如果您的测试基于PKCS#12密钥库,则似乎已经是这种情况)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.