2013-04-17 2 views
23

Je fichier avec une chaîne de certificats - certificate.cer:Comment ajouter une chaîne de certificats au magasin de clés?

subject=/C... 
issuer=/C=US/O=VeriSign, Inc... 
-----BEGIN CERTIFICATE----- 
... 
-----END CERTIFICATE----- 

subject=/C=US/O=VeriSign, Inc... 
issuer=/C=US/O=VeriSign, Inc... 
-----BEGIN CERTIFICATE----- 
... 
-----END CERTIFICATE----- 

subject=/C=US/O=VeriSign, Inc... 
issuer=/C=US/O=VeriSign, Inc... 
-----BEGIN CERTIFICATE----- 
... 
-----END CERTIFICATE----- 

Je dois ajouter cette chaîne de certificats à keystore.
Ce que je fais:

openssl x509 -outform der -in certificate.cer -out cert.der 
keytool -v -importcert -alias mykey -file cert.der -keypass <passwd> -keystore keystore -storepass <passwd> -alias <myalias> 

En conséquence, je n'ai que 1 certificat keystore.
Mais devrait avoir 3.
Qu'est-ce qui pourrait ne pas fonctionner?

SOLUTION:
CA m'a envoyé des certificats au format PKCS # 7.
Je les ai stockées dans le fichier certificate.p7b puis les ajouter à KeyStore par commande suivante:

keytool -import -trustcacerts -file certificate.p7b -keystore keystore -storepass <mypasswd> -alias "myalias" 
+0

Quelle version de KeyTool a été utilisée? La version '6-b14' n'est pas capable d'importer des chaînes de certificats parce que:' // nous ne pouvons stocker qu'un seul certificat d'utilisateur par identité. ' Jetez un oeil au code source: 'http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/security/tools/KeyTool.java # KeyTool.doImportIdentityDatabase% 28java.io.InputStream% 29' –

Répondre

8

de l'homme keytool - il importe chaîne de certificats, si l'entrée est donnée au format PKCS # 7, sinon seulement le certificat unique est importé. Vous devriez pouvoir convertir les certificats au format PKCS # 7 avec openssl, via la commande openssl crl2pkcs7.

+0

J'ai déjà des certificats dans PKCS # 7 format. CA m'en a envoyé par mail. Les certificats ont été ajoutés au magasin de clés en suivant la commande suivante: keytool -import -trustcacerts -file certificate.p7b -keystore keystore -storepass -alias "myalias" Merci! –

+10

Ne travaillait pas pour moi. Je reçois l'erreur: 'keytool error: java.lang.Exception: Entrée pas un certificat X.509'. Le fichier p7p a été créé via: 'openssl crl2pkcs7 -nocrl -certfile cacert.pem -certfile client-cert.pem -out outfile.p7b' –

+2

Le post ici:' http: // stackoverflow.com/a/22028156/1817029' indique que keytool ne peut pas importer les fichiers p7p! –

14

Je résolu le problème par tous les PEMS afficher le fichier ensemble:

cat cert.pem chain.pem fullchain.pem >all.pem 
openssl pkcs12 -export -in all.pem -inkey privkey.pem -out cert_and_key.p12 -name tomcat -CAfile chain.pem -caname root -password MYPASSWORD 
keytool -importkeystore -deststorepass MYPASSWORD -destkeypass MYPASSWORD -destkeystore MyDSKeyStore.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -srcstorepass MYPASSWORD -alias tomcat 
keytool -import -trustcacerts -alias root -file chain.pem -keystore MyDSKeyStore.jks -storepass MYPASSWORD 

(keytool ne savait pas quoi faire avec une clé formatée PKCS7)

Je suis tous les PEMS de letsencrypt

+0

Belle solution, p7b ne pas importer pour moi – cen

+0

A travaillé pour moi aussi. Pour obtenir cette clé privée, cette autre réponse était utile: https://security.stackexchange.com/a/66865/141918 –

Questions connexes