2012-02-28 149 views
3

我正在实施使用自签名证书的服务器。将证书分发给客户端的最佳方式是什么?我可以将证书导入java密钥库并设置客户端。但有什么办法可以避免每个客户端手动导入证书。这可以由java客户端自动完成吗?我通过JSSE参考,但无法弄清楚如何做到这一点。将不胜感激任何帮助。Java客户端如何自动接受来自服务器的自签名证书

Regards, Sampath。

+0

看到这个苏答案:http://stackoverflow.com/questions/2893819/telling-java-to-accept-self-signed-ssl-certificate 问候 – Sorin 2012-02-28 11:09:03

+1

@索林避免接受这个问题的答案。相反,应该使用这个答案中的方法:http://stackoverflow.com/a/859271/372643 – Bruno 2012-02-28 13:23:34

+0

我在发布之前看过了。在那里提到使用keytool导入证书。这是否意味着用户需要在机器上手动下载证书。我正在寻找一种可以自动完成交换的方式。 – 2012-02-28 13:58:27

回答

0

查看KeyStore类。它允许您操作Java密钥库。

代码示例:

KeyStore ks = KeyStore.getInstance("JKS"); 
ks.load(null, null); // Creates a new keystore 

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("cert.cer")); // Or read from URL 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
Certificate cert = null; 

if (bis.available() > 0) { 
    cert = cf.generateCertificate(bis); 
    ks.setCertificateEntry("SGCert", cert); 
} 

ks.setCertificateEntry("SGCert", cert); 
ks.store(new FileOutputStream("out.keystore"), "secret".toCharArray()); 
+0

感谢您的示例。 cert.cer从哪里来。它是否必须从服务器下载? – 2012-02-28 13:59:10

+0

我的部分格式不正确:您可以滚动到右侧以查看代码注释,其中说:'​​//或从URL读取'您可以使用URL而不是文件名从中读取证书。另一种方法是将证书包含在客户端安装程序中。 – nfechner 2012-02-28 14:13:22

+0

我的不好。应该充分阅读。让我试试这种方法。再次感谢。 – 2012-02-28 15:11:02

相关问题