首页 文章

在Java KeyStore中导入私钥/公钥证书对[重复]

提问于
浏览
70

这个问题在这里已有答案:

我使用以下步骤创建一个新的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

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

2 回答

  • 168

    使用私钥和公共证书,首先需要创建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证书的证书链来执行此步骤 .

  • 0

    密钥库需要密钥库文件 . KeyStore 类需要 FileInputStream . 但是如果你提供null(而不是 FileInputStream 实例)empty keystore will be loaded . 创建密钥库后,可以使用 keytool 验证其完整性 .

    以下代码创建一个空密钥的空密钥库

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

    拥有密钥库后,导入证书非常容易 . 结帐this link获取示例代码 .

相关问题