Ssl 如何从现有证书(abc.crt)和abc.key文件创建密钥库?

Ssl 如何从现有证书(abc.crt)和abc.key文件创建密钥库?,ssl,keytool,Ssl,Keytool,我正在尝试将证书和密钥文件导入密钥库,但无法做到这一点 如何通过导入现有证书(abc.crt)和abc.key文件来创建密钥库?最简单的方法可能是使用OpenSSL创建PKCS#12文件: openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12 您应该能够使用PKCS12keystore类型直接使用生成的文件 如果确实需要,可以使用keytool-importkeystore将其转换为JKS(可从Java 6的keytool

我正在尝试将证书和密钥文件导入密钥库,但无法做到这一点


如何通过导入现有证书(abc.crt)和abc.key文件来创建密钥库?

最简单的方法可能是使用OpenSSL创建PKCS#12文件:

openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12
您应该能够使用
PKCS12
keystore类型直接使用生成的文件

如果确实需要,可以使用
keytool-importkeystore
将其转换为JKS(可从Java 6的
keytool
中获得):


您必须使用OpenSSL和keytool

CER和PVK文件的OpenSSL>P12

openssl pkcs12-导出-nameservercert-inselfsignedcert.crt-inkeyserverprivatekey.key-outmyp12keystore.p12

p12>JKS的键工具

keytool-importkeystore-destkeystoremykeystore.jks-srckeystoremyp12keystore.p12-srcstoretypkcs12-别名servercert


除了@Bruno的答案外,您还需要为alias提供
-name
,否则Tomcat将抛出
别名Tomcat未识别密钥条目
错误

示例命令:
openssl pkcs12-export-in-localhost.crt-inkey-localhost.key-out-localhost.p12-name-localhost

如果密钥库是用于tomcat的,则在使用上述答案创建密钥库后,必须添加最后一步来为密钥创建“tomcat”别名:

keytool -changealias -alias "1" -destalias "tomcat" -keystore keystore-file.jks
您可以通过以下方式检查结果:

keytool -list -keystore keystore-file.jks -v

加上@MK Yung和@Bruno的答案。。请输入目标密钥库的密码。当我在没有密码的情况下输入命令时,我看到控制台挂起

openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12 -name localhost  -passout pass:changeit

谢谢Bruno,您能告诉我从哪里可以获得openssl实用程序吗?这里还有一个问题,生成的密钥库是特定于平台的吗?这意味着如果我在windows中创建密钥库并在unix中使用它,它会工作吗?生成的密钥库与平台无关。OSX和大多数Linux发行版应该附带OpenSSL(否则,只需安装软件包)。Windows也有二进制文件(例如,尽管你可能也能找到其他地方。)我还应该指出,对于
PKCS12
密钥库,密钥密码与存储的密码相同(而对于其他类型的存储,尤其是
JKS
),密钥密码可能不同。@HenningMakholm,您的私钥文件可能没有密码保护,您必须在创建PKCS#12文件时设置一个。私钥在哪里?这就是我不明白的!!这与前面的回答有什么不同?谢谢。我有pkcs#7证书。我应该使用pkcs12还是PKCS7?请注意我们正在传递的选项-name(对于PKCS)-alias(对于Jks)。
openssl pkcs12 -export -in abc.crt -inkey abc.key -out abc.p12 -name localhost  -passout pass:changeit