Solución:
Un script bash que importará todos los certificados de un archivo 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
Por ejemplo:
./jks_import_pem TrustedCAs.PEM changeit truststore.jks
Si desea incluir los certificados de CA, debe agregar el -trustcacerts
opción.
Si tiene varias cadenas de certificados en un archivo PEM, tendrá que dividir el archivo.
Quería hacer lo mismo, pero aparentemente solo es posible si también está importando la clave:
Hay dos tipos de entradas: entradas de clave y entradas de certificado de confianza, y solo la entrada de clave puede contener una “cadena” de certificados adjunta. Las entradas de certificado de confianza son todas entradas de certificado único.
(https://www.java.net/node/674524#comment-709695)
Incluso intenté convertir primero al formato PKCS # 7, pero no funcionó, ya sea por la razón anterior o porque mi versión de keytool era demasiado antigua.
Así que primero tuve que dividir el archivo en certificados separados:
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)
Luego importe cada uno individualmente.