如何使用自签名证书创建密钥库和信任库?

vic*_*c99 9 java ssl openssl keystore keytool

我们有 JAVA 服务器和客户端使用 SSL 通过网络进行通信。服务器和客户端使用证书相互验证。服务器和客户端使用的密钥库类型是 JKS。服务器和客户端的密钥库和信任库文件名是:server.keystore、server.truststore、client.keystore 和 client.truststore。

我使用自签名证书仅用于测试。

问题:

一季度。我想知道为什么我需要在步骤 6 中将服务器和客户端自己的证书添加到它们各自的信任库中。

Q2。我可以减少步骤来实现相同的目标吗?如果是,那么如何?

为服务器创建 RSA 密钥、自签名证书、密钥库和信任库的步骤

1.生成RSA私钥

openssl genrsa -out diagserverCA.key 2048

2.创建x509证书

openssl req -x509 -new -nodes -key diagserverCA.key -sha256 -days 1024 -out diagserverCA.pem

3. 从私钥和公共证书创建一个 PKCS12 密钥库。

openssl pkcs12 -export -name server-cert -in diagserverCA.pem -inkey diagserverCA.key -out serverkeystore.p12

4. 将 PKCS12 密钥库转换为 JKS 密钥库

keytool -importkeystore -destkeystore server.keystore -srckeystore serverkeystore.p12 -srcstoretype pkcs12 -alias server-cert

5. 将客户端的证书导入服务器的信任库。

keytool -import -alias client-cert -file diagclientCA.pem -keystore server.truststore

6. 将服务器的证书导入服务器的信任库。

keytool -import -alias server-cert -file diagserverCA.pem -keystore server.truststore

为客户端创建 RSA 私钥、自签名证书、密钥库和信任库的步骤

1.生成私钥

openssl genrsa -out diagclientCA.key 2048

2.创建x509证书

openssl req -x509 -new -nodes -key diagclientCA.key -sha256 -days 1024 -out diagclientCA.pem

3. 从私钥和公共证书创建 PKCS12 密钥库。

openssl pkcs12 -export -name client-cert -in diagclientCA.pem -inkey diagclientCA.key -out clientkeystore.p12

4. 将 PKCS12 密钥库转换为 JKS 密钥库

keytool -importkeystore -destkeystore client.keystore -srckeystore clientkeystore.p12 -srcstoretype pkcs12 -alias client-cert

5. 将服务器的证书导入客户端的信任库。

keytool -import -alias server-cert -file diagserverCA.pem -keystore client.truststore

6. 将客户的证书导入客户的信任库。

keytool -import -alias client-cert -file diagclientCA.pem -keystore client.truststore

use*_*421 3

\n

Q1. 我想知道为什么我需要在步骤 6 中将 server\xe2\x80\x99s 和 client\xe2\x80\x99s 自己的证书添加到各自的信任库中。

\n
\n\n

你不知道。您将服务器和客户端证书添加到彼此的信任库中。服务器和客户端不需要信任自己的证书,但他们需要信任彼此的证书。

\n\n
\n

Q2。我可以减少步骤数来实现同样的目标吗?如果是,那么如何?

\n
\n\n

您可以使用 来完成整个事情keytool。有大量记录的示例。openssl您根本不需要使用。

\n\n

批判:

\n\n
    \n
  • 第一部分中,步骤5和步骤6都是错误的。应该有一个步骤:将服务器的证书导出到客户端的信任库。
  • \n
  • 同样,在第二部分中,步骤 5 和 6 又是错误的,并且应该只有步骤:将客户端的证书导出到服务器的密钥库。
  • \n
  • 换句话说,两个步骤5应该互换,并且删除两个步骤6。
  • \n
\n\n

您可以在 JDK 文档中的JSSE 参考指南中找到执行此操作的正确说明。每人大约三步。但它真正表明的是,自签名证书确实不值得打印在纸上。获取 CA 签名的证书。更多价值且更易于部署(无需导出步骤)。

\n\n

你从哪里得到这些垃圾?

\n