keytool在单个文件中导入多个证书

如何使用keytool [到cert store]在单个文件中导入多个证书?

keytool -importcert只导入第一个。

如果要包含CA证书,则应添加-trustcacerts选项。

如果一个PEM文件中有多个证书链,则必须拆分该文件 。

一个bash脚本,它将从PEM文件导入所有证书:

 #!/bin/bash PEM_FILE=$1 PASSWORD=$2 KEYSTORE=$3 # number of certs in the PEM file CERTS=$(grep 'END CERTIFICATE' $PEM_FILE| wc -l) # For every cert in the PEM file, extract it and import into the JKS keystore # awk command: step 1, if line is in the desired cert, print the line # step 2, increment counter when last line of cert is found for N in $(seq 0 $(($CERTS - 1))); do ALIAS="${PEM_FILE%.*}-$N" cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }" | keytool -noprompt -import -trustcacerts \ -alias $ALIAS -keystore $KEYSTORE -storepass $PASSWORD done 

例如:

 ./jks_import_pem TrustedCAs.PEM changeit truststore.jks 

我想做同样的事情,但显然只有你导入密钥才有可能:

有两种类型的条目 – 密钥条目和受信任的证书条目,只有密钥条目可以包含附加到其上的证书“链”。 受信任的证书条目都是单个证书条目。

https://www.java.net/node/674524#comment-709695

我甚至尝试首先转换为PKCS#7格式 ,但由于上述原因或因为我的keytool版本太旧而无法正常工作。

因此,必须先将文件拆分为单独的证书:

 cat certchain.pem | awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > ("cert" n ".pem")}' 

https://serverfault.com/q/391396/58568

然后单独导入每个。