2012-02-28 144 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

相關問題