0

我有一个 java 项目,其中每个安装都有一个服务器和一个客户端。连接应牢固。服务器部分是跨平台的(包括 Android),所以使用 Keytool 或 openssl 生成密钥不是一个选项。

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

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

请提供一个实际实施的例子。也欢迎替代方法或建议。

4

2 回答 2

1

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

于 2013-02-27T21:10:08.457 回答
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 创建证书并导入它。有一个可用的教程

于 2013-02-27T21:02:12.230 回答