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

我使用以下步骤创建了一个带有一对私钥/公钥的新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并同时使用公共密钥和私有密钥导入证书?


温温酱
浏览 382回答 3
3回答

慕勒3428872

使用私有密钥和公共证书,您需要首先创建一个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 keystorekeytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert要验证JKS的内容,可以使用以下命令:keytool -list -v -keystore mykeystore.jks如果这不是一个自签名证书,则可能要遵循此步骤,导入证书链,该证书链通向受信任的CA证书。

动漫人物

密钥库需要密钥库文件。该KeyStore级需要FileInputStream。但是,如果您提供null(而不是FileInputStream实例),则会加载一个空的密钥库。创建密钥库后,您可以使用验证其完整性keytool。以下代码使用空密码创建一个空密钥库  KeyStore ks2 = KeyStore.getInstance("jks");  ks2.load(null,"".toCharArray());  FileOutputStream out = new FileOutputStream("C:\\mykeytore.keystore");  ks2.store(out, "".toCharArray());拥有密钥库后,导入证书非常容易。在此链接中查看示例代码。

米琪卡哇伊

您对的观察InpputStream.available()是正确的,但是我看到的文档FilterInputStream.available()说返回了可以从此输入流读取(或跳过)的字节数的估计值,并且没有警告!在示例(在Blog中)中,DataInputStream.available() 在任何地方都使用&FilterInputStream扩展DataInputStream。available()在这种特殊情况下使用不安全吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java