在Java KeyStore中导入私钥/公钥证书对

我使用以下步骤创build了一个新的Java密钥库,其中包含一对由Java(内部)服务器和TLS使用的私钥/公钥。 请注意,证书是自签名的:

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 

所以问题是:如何创buildJava KeyStore并使用公钥和私钥导入证书而不使用GUI?

使用您的私钥和公共证书,您需要先创buildPKCS12密钥库,然后将其转换为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 

要validationJKS的内容,可以使用这个命令:

 keytool -list -v -keystore mykeystore.jks 

如果这不是自签名证书,那么您可能需要按照此步骤导入证书链,导致信任的CA证书。

密钥库需要密钥库文件。 KeyStore类需要一个FileInputStream 。 但是,如果您提供null(而不是FileInputStream实例), 将会加载一个空的密钥库 。 创build密钥库后,可以使用keytoolvalidation其完整性。

下面的代码创build一个空的密码存储空密码

  KeyStore ks2 = KeyStore.getInstance("jks"); ks2.load(null,"".toCharArray()); FileOutputStream out = new FileOutputStream("C:\\mykeytore.keystore"); ks2.store(out, "".toCharArray()); 

一旦拥有密钥库,导入证书非常简单。 查看示例代码的链接 。