Java 如何仅使用keytool导出所有中间证书,包括根证书

Java 如何仅使用keytool导出所有中间证书,包括根证书,java,ssl,ssl-certificate,Java,Ssl,Ssl Certificate,我正在尝试配置SSL,并从服务器团队获得了.pfx文件。 证书链长度:2 当我尝试使用keytool导出证书链时,只导出第一个证书 试图找出在发出keytool命令时是否缺少任何其他参数 我使用的命令有: 1) pfx不支持将JKS转换为别名 keytool -importkeystore -srckeystore "serverauth.pfx" -srcstoretype pkcs12 -destkeystore "serverauth.jks" 2) 尝试使用下面的方法导出证书 key

我正在尝试配置SSL,并从服务器团队获得了.pfx文件。 证书链长度:2

当我尝试使用keytool导出证书链时,只导出第一个证书

试图找出在发出keytool命令时是否缺少任何其他参数

我使用的命令有:

1) pfx不支持将JKS转换为别名

keytool -importkeystore -srckeystore "serverauth.pfx" -srcstoretype pkcs12 -destkeystore "serverauth.jks" 
2) 尝试使用下面的方法导出证书

keytool -export -alias 1 -keystore "serverauth.jks" -rfc -file "authclient.cert" 
但上面的命令只生成第一个证书

如果删除整个别名选项,则会出现错误

keytool error: java.lang.Exception: Alias <1> does not exist
keytool错误:java.lang.Exception:别名不存在
还有其他的流程吗

keytool -list -rfc -keystore serverauth.jks

这将在单个流中输出所有证书。如果要将它们拆分为单独的文件,则需要做更多的工作。

这在Java 8中可以将整个证书链导出到一个文件:

keytool -list -alias yourcert -keystore /path/to/keystore -rfc
与导出格式相同,只是它转储整个链。您失去了-file选项,但只需使用

重定向到一个文件即可(例如java cacert):

用于`keytool-list-keystore cacerts-storepass changeit | grep trustedCertEntry | grep-Eo“^[^,]*”`中的证书;做

`keytool-exportcert-keystore cacerts-alias$cert-file${cert}.crt您可能必须分别导出签名链中的每个证书。
keytool-list
为.pfx文件中的条目显示了什么?@Andrew它列出了两个证书。。别名:1创建日期:2015年5月10日条目类型:PrivateKeyEntry证书链长度:2证书[1]:。。。。。。证书[2]:……您能否在问题本身中发布完整的
keytool-list
输出,以便我们可以看到详细信息?由于别名中有空格,需要进行小的更改:请在前面加上IFS=$'\n'并引用-alias参数。您应该使用-cacert参数来避免警告。另外,-storepass参数代替此参数在我的Java8上不起作用。它只导出了最终实体证书:java版本“1.8.0_144”java(TM)SE运行时环境(build 1.8.0_144-b01)java HotSpot(TM)64位服务器VM(build 25.144-b01,混合模式)这在我的java 8上不起作用。它仅导出了最终实体证书:java版本“1.8.0_144”java(TM)SE运行时环境(构建1.8.0_144-b01)java热点(TM)64位服务器VM(构建25.144-b01,混合模式)
for cert in `keytool -list -keystore cacerts -storepass changeit | grep trustedCertEntry | grep -Eo "^[^,]*"`;do
    `keytool -exportcert -keystore cacerts -alias $cert -file ${cert}.crt <<< $'changeit'`
done