一尘不染

将私有密钥/公共证书对导入到Java KeyStore中

java

我使用以下步骤创建了一个带有一对私钥/公钥的新Java密钥库,供具有TLS的Java(内部)服务器使用。请注意,证书是自签名的:

1)使用AES256生成密钥

openssl genrsa -aes256 -out server.key 1024

2)生成CA的证书请求

openssl req -x509 -sha256 -new -key server.key -out server.csr

3)生成自签名有效期10年

openssl x509 -sha256 -days 3652 -in server.csr -signkey server.key -out selfsigned.crt

4)使用KeyStoreExplorer之类的程序将对(私钥和自签名证书)导入新的JKS中

这可行,但是我想在不使用GUI的情况下实现最后一步。

我知道如何仅导入自签名证书:

// create the keystore and import the public key. THIS WILL NOT IMPORT THE PRIVATE KEY SO THE KEYSTORE CAN'T BE USED ON THE SERVER TO MAKE THE TLS CONNECTION
/usr/java/jdk1.6.0_45/bin/keytool -import -alias myservercert -file server.crt -keystore mykeystore.jks

因此,问题是:如何在不使用GUI的情况下创建Java KeyStore并同时使用公共密钥和私有密钥导入证书?


阅读 655

收藏
2020-03-23

共1个答案

一尘不染

使用私有密钥和公共证书,你需要首先创建一个PKCS12密钥库,然后将其转换为JKS。

# Create PKCS12 keystore from private key and public certificate.
openssl pkcs12 -export -name myservercert -in selfsigned.crt -inkey server.key -out keystore.p12

# Convert PKCS12 keystore into a JKS keystore
keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert

要验证JKS的内容,可以使用以下命令:

keytool -list -v -keystore mykeystore.jks

如果这不是一个自签名证书,则可能要遵循此步骤,导入证书链,该证书链通向受信任的CA证书。

2020-03-23