SSL通信Java

时间:2012-09-11 22:21:42

标签: java security ssl

我已经为我的应用的admin实例和我的应用的judge实例生成了自签名证书。这些实例在不同的计算机上运行,​​并且它们都拥有彼此证书的副本和它们自己的副本。我想在这两者之间进行沟通,我想知道我目前的方法是否是正确的方法:

CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate certificate = cf.generateCertificate(new FileInputStream(...));

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, "test".toCharArray());
keyStore.setCertificateEntry("admin", certificate);

// Code omitted which repeats the above to set the judge certificate

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);

factory = ctx.getSocketFactory(); // Or #getServerSocketFactory() if admin and not judge

有了这个,我将能够安全地与这两个实例进行通信,对吗?

1 个答案:

答案 0 :(得分:3)

没有。 KeyManager需要一个带密钥条目的密钥库,而不是证书条目。只需按照JSSE的设计者的意图使用密钥库文件。