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


17

我们有JAVA服务器和客户端使用SSL通过网络进行通信。服务器和客户端使用证书相互认证。服务器和客户端使用的密钥库类型为JKS。服务器和客户端加载其密钥库和信任库文件。密钥库和信任库文件名是:server.keystore,server.truststore,client.keystore和client.truststore。我正在使用自签名证书仅用于测试。

问题:

Q1。我想知道为什么我需要在步骤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
    

Answers:


3

普通的https只需要1条命令;

keytool -genkeypair

如果客户端不是盲目地信任任何证书,则需要将服务器公共证书复制到客户端。

为什么要使用openssl?

https://docs.oracle.com/javase/10/tools/keytool.htm


在我的编辑获得同行评审之前:该标志是-genkeypair,并且您可以添加很多不同的标志来自定义证书(例如-validity 365或-dname“ cn = Mark Jones,ou = JavaSoft,o = Sun,c = US ”)。最好查看答案中的链接以获取更多详细信息。
约翰内斯·史达德勒

1
@JohannesStadler谢谢,我批准了您的编辑并将链接更新为最新的Java版本,请注意,“此命令在以前的版本中名为-genkey”
user1133275
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.