2013-02-02 11 views

risposta

4

Se si desidera includere i certificati CA, è necessario aggiungere l'opzione -trustcacerts.

Se si dispone di più catene di certificati in un file PEM, è necessario split the file.

+0

non è questa la domanda - come posso aggiungerne più da un singolo file? – Fakrudeen

+0

modificato la mia risposta. – bowmore

+0

sì - questo è quello che ho fatto alla fine. Ho usato csplit. – Fakrudeen

1

ho voluto fare la stessa cosa, ma a quanto pare è possibile solo se si sta importando la chiave così:

Ci sono due tipi di voci chiave entries- e le voci CERT di fiducia, e solo la voce della chiave può contenere una "catena" di certificati, allegata a . Le voci di certificato attendibili sono tutte voci di certificato singolo.

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

ho anche provato converting to PKCS#7 format first, ma non ha funzionato, sia per la ragione sopra o perché la mia versione di keytool era troppo vecchio.

Così dovuto dividere prima il file in certs separati:

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)

Poi importare singolarmente.

sceneggiatura
+0

Nota che per essere strettamente corretto, avrai bisogno di parentesi attorno alla concatenazione di stringhe: '(" cert "n" .pem ")'. Senza di loro, alcune versioni di awk verranno confuse (OS X, comunque). – eaj

+0

Aggiornato, grazie! – bmaupin

8

Un bash che consente di importare tutti i certificati da un file 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 

Ad esempio:

./jks_import_pem TrustedCAs.PEM changeit truststore.jks 
Problemi correlati