繁体   English   中英

使用https中的证书

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM