SSL与运行时证书Java

时间:2013-02-27 20:13:53

标签: java ssl runtime

我有一个java项目,在每个安装中都有一个服务器和一个客户端。连接应该是安全的。服务器部分是跨平台的(包括Android),因此使用Keytool或openssl进行密钥生成不是一种选择。

由于会有很多服务器,我不能只生成一个证书并包含它,因为每个服务器都有相同的证书(当然,自签名)。

理想情况下,我希望在服务器第一次启动时使用纯java生成证书,因为我不能使用任何外部工具。

请提供实际实施的示例。也欢迎其他方法或建议。

2 个答案:

答案 0 :(得分:1)

这就像你想要的那样。

//Build a blank keystore with a password
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
char[] password = "some password".toCharArray();
ks.load(null, password);

//Sample key storage
javax.crypto.SecretKey mySecretKey;
KeyStore.SecretKeyEntry skEntry =
    new KeyStore.SecretKeyEntry(mySecretKey);
ks.setEntry("secretKeyAlias", skEntry, 
    new KeyStore.PasswordProtection(password));

//Update the keystore file
fos = new java.io.FileOutputStream("keystorefilename");
ks.store(fos, password);

但是,您需要使用BouncyCastle来创建证书并导入它。有a tutorial on that available

答案 1 :(得分:1)

这个问题同时阅读评论也没有多大意义 即使你在第一次安装时动态生成了一个密钥库(这可能是通过Bouncy Castle),你需要将它存储在文件系统中以便下次重启。
如果客户端要对服务器进行身份验证,那么他们需要获得与他们在信任库中拥有的证书相同的证书(而不是根据您的OP在每次重启时新生成的证书),这是您案件中的难点部分。不使用知情发行人的证书,并且必须手动将可信证书导入客户的信任库。