Java 密钥库 PrivateKeyEntry 与 trustCertEntry

yur*_*mix 9 security ssl hadoop jks

我正在更新我的 Hadoop 集群使用的证书。当前 JKS 有一个条目:

Your keystore contains 1 entry

Alias name: myalias
Creation date: Jan 10, 2019
Entry type: PrivateKeyEntry
Certificate chain length: 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试从新证书创建一个新的密钥库:

keytool -importcert -alias myalias  -file newcertfile.crt -keystore newkeystore.jks
Run Code Online (Sandbox Code Playgroud)

但是我被问到我是否信任这个证书(如果我说不,keytool 退出):

Trust this certificate? [no]:  yes
Run Code Online (Sandbox Code Playgroud)

当我查看结果时,它不再是 PrivateKeyEntry 而是trustedCertEntry:

keytool -list -v -keystore newkeystore.jks
...
...
Your keystore contains 1 entry

Alias name: myalias
Creation date: Feb 20, 2019
Entry type: trustedCertEntry
...
...
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?我应该只使用带有trustedCertEntry 的JKS 还是有办法让它像旧的JKS(带有PrivateKeyEntry)一样?

yur*_*mix 5

我最终发现我还必须提供私钥(正如Roshith在他提供的链接中提到的)。

所以我首先创建了一个 pfx 文件:

openssl pkcs12 -export -out newcertbundle.pfx -inkey myprivate.key -in newcertfile.crt
Run Code Online (Sandbox Code Playgroud)

然后将其转换为jks:

keytool -importkeystore -srckeystore newcertbundle.pfx -srcstoretype PKCS12 -srcstorepass mypass -deststorepass mypass -destkeypass mypass -destkeystore newkeystore.jks
Run Code Online (Sandbox Code Playgroud)

我唯一无法弄清楚(但对我来说不是太重要)是如何使用别名,所以我使用了默认别名(当我尝试指定一个时,我得到:别名不存在。这是讨论在这里)。

  • 您得到的别名不存在,因为您在导出 pfx 时没有提供别名,您需要在“openssl pkcs12 export”命令中提供“-name <ALIAS>”,并在“openssl pkcs12 export”命令中提供“-alias <ALIAS>” keytool`命令。 (2认同)