【发布时间】:2016-02-03 22:45:30
【问题描述】:
我想在 java 中通过 SSL/TLS 建立客户端服务器通信。服务器是多线程的。使用 openssl,我充当了我自己的 CA(为权威创建了私钥和自签名证书)。现在我想为我的服务器和客户端创建从我创建的 CA 签名的密钥和证书。
1) 我是否必须根据提示为每个客户端创建证书和密钥?或者它是另一种“自动化”方式,例如有脚本吗?
2) 我已经看到了用于设置密钥库的这段代码
private void setupClientKeyStore() throws GeneralSecurityException, IOException
{
clientKeyStore = KeyStore.getInstance("JKS");
clientKeyStore.load(new FileInputStream("client1publickey.jks"),
"密码".toCharArray() );
}
private void setupServerKeystore() 抛出 GeneralSecurityException、IOException
{
InputStream keyStoreResource = new FileInputStream("serverprivatekey.jks");
char[] keyStorePassphrase = "密码".toCharArray();
serverKeyStore = KeyStore.getInstance("JKS");
serverKeyStore.load(keyStoreResource, keyStorePassphrase);
}
我已运行命令查看这些条目的类型,client1publickey 是 TrustedCert 条目,而 serverprivatekey 是 PrivateKey 条目。此代码在我的服务器类上。我的客户端类中有此代码
private void setupServerKeystore() 抛出 GeneralSecurityException, IOException {
serverKeyStore = KeyStore.getInstance("JKS");
serverKeyStore.load(new FileInputStream("serverpublickwy.jks"),
"大学".toCharArray());
}
私人无效 setupClientKeyStore() 抛出 GeneralSecurityException,IOException {
clientKeyStore = KeyStore.getInstance("JKS");
clientKeyStore.load(new FileInputStream("client1privatekey.jks"),
"大学".toCharArray() );}
问题是如何分别创建这些 jks 文件? publickey.jks 文件是证书,对吗?如何从私钥将其保存在另一个文件中并从 CA 签名?还是我可以在客户端/服务器之间建立连接的另一种方式?首先,我使用 openssl 创建了 CA,然后服务器和客户端的两个 jks 文件包括证书和密钥。
【问题讨论】:
-
我对你在问什么感到困惑。您是否正在寻找一种自动化方法来为您的每个客户生成唯一的密钥库以实现相互身份验证并让您的服务认可它们?
-
正是我要找的!