我是SSL的新手,并试图弄清楚如何使用Java Netty服务器。我想基本上这样做:Correctly creating a new certificate with an intermediate certificate using bouny castle 我想为不同的客户创建证书,让他们与我的服务器通信。我为每个客户端生成了唯一的证书,但我有两个关于Java中SSL实现的基本问题。
当我创建我的中间证书来签署客户端证书时,这基本上是一次类似于创建根证书的东西吗?意思是,在该示例中,作者生成KeyPair intermediatePair
。当我签署不同的客户端证书时,我是否重新生成此KeyPair?我的猜测是否定的,我应该在某处保存这个中间证书,然后在我的服务器启动时加载它。
客户如何真正得到服务器的信任?事实上,他们拥有的证书是由服务器rootcert-> intermediatecert签名并创建信任链吗?或者在我创建证书之后,我需要将该证书添加到我在服务器启动时使用的KeyStore trustStore
?像这样的东西(伪代码)
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
Path p = Paths.get(path);
byte[] bytes = Files.readAllBytes(p);
InputStream in = new ByteArrayInputStream(bytes);
X509Certificate certificate = null;
if (in != null) {
certificate = (X509Certificate) certificateFactory.generateCertificate(in);
in.close();
}
trustStore.setCertificateEntry("certficateName", certificate);
答案 0 :(得分:1)
当我创建我的中间证书以签署客户端证书时,这基本上是一次类似于创建根证书吗?
有一次到期。
意思是,在该示例中,作者生成
KeyPair intermediatePair
。当我签署不同的客户端证书时,我是否重新生成此KeyPair?
没有
我的猜测是否定的,我应该在某个地方保存这个中间证书,然后在我的服务器启动时加载它。
是
- 客户如何真正得到服务器的信任?事实上,他们拥有的证书是由服务器rootcert-> intermediatecert签名并创建信任链吗?
醇>
事实上,从客户端证书到受信任的根证书存在一系列证书。
或者在我创建证书之后,所以我需要在我的服务器启动时使用
KeyStore trustStore
我添加该证书?像这样的东西(伪代码)
没有。只需通过keytool
确保根证书位于信任库中。你根本不需要编写代码。