首页 文章

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

提问于
浏览
3

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

我使用自签名证书进行测试 .

Questions:

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

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

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

1. Generate a private RSA key

openssl genrsa -out diagserverCA.key 2048

2. Create a x509 certificate

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

3. Create a PKCS12 keystore from private key and public certificate.

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

4. Convert PKCS12 keystore into a JKS keystore

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

5. Import a client's certificate to the server's trust store.

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

6. Import a server's certificate to the server's trust store.

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

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

1. Generate a private key

openssl genrsa -out diagclientCA.key 2048

2. Create a x509 certificate

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

3. Create PKCS12 keystore from private key and public certificate.

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

4. Convert a PKCS12 keystore into a JKS keystore

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

5. Import a server's certificate to the client's trust store.

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

6. Import a client's certificate to the client's trust store.

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

2 回答

  • -1

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

    你没有 . 您将服务器和客户端证书添加到彼此的信任库中 . 服务器和客户端不需要信任他们自己的证书,但他们确实需要相互信任 .

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

    你可以用 keytool 完成整个事情 . 大量记录的例子 . 您根本不需要使用 openssl .

    批判:

    • 在第一部分中,步骤5和6都是错误的 . 应该有一个步骤:导出服务器's certificate to the client' s truststore .

    • 同样,在第二部分中,步骤5和6再次出错,并且应该只有步骤:导出客户端's certificate to the server'的密钥库 .

    • 换句话说,两个步骤5s应该互换,并且两个步骤6s被删除 .

    您将在JDK文档中的JSSE Reference Guide中找到正确的操作说明 . 每个约三个步骤 . 但真正显示的是,自签名证书确实没有打印出来 . 获取CA签名证书 . 更多的 Value 和更容易部署(没有出口步骤) .

    你在哪里得到这个垃圾?

  • 3

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

    A1 . 如果您没有使用通用证书颁发机构来签署您的客户端和服务器证书......将每个证书添加到信任存储区是唯一的方法 . 但是......即使在测试环境中,您也可以创建自己的证书颁发机构,并使用它来签署您创建的客户端和服务器证书 . 然后,您的信任存储区只需要包含证书颁发机构的公钥 .

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

    A2 . 是的,使用通用证书签署您的客户端和服务器证书 .

    查看this post中的脚本,了解如何创建自己的CA并使用它来签署服务器和客户端证书 . 它还创建了您的信任存储......

    希望这可以帮助 .

    最好的,Ace

相关问题