2013-04-17 11 views
23

Mam plik z łańcuchem certyfikatów - certificate.cer:Jak dodać łańcuch certyfikatów do magazynu kluczy?

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----- 

muszę dodać ten łańcuch certyfikatów do kluczy.
Co robię:

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> 

W rezultacie mam tylko 1 certyfikatu w magazynie kluczy.
Ale powinien mieć 3.
Co może być nie tak?

ROZWIĄZANIE:
CA przesłała mi certyfikaty w formacie PKCS # 7.
I przechowywać je w pliku certificate.p7b a następnie pomyślnie dodane do magazynu kluczy przez następującego polecenia:

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

Która wersja KeyTool została użyta? Wersja '6-b14' nie może importować łańcuchów certyfikatów, ponieważ:' // możemy przechowywać tylko jeden certyfikat użytkownika na tożsamość. Zobacz kod źródłowy: 'http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/security/tools/KeyTool.java # KeyTool.doImportIdentityDatabase% 28java.io.InputStream% 29' –

Odpowiedz

8

od człowieka keytool - importuje łańcuch certyfikatów, jeśli wejście jest podany w formacie PKCS # 7, tylko inaczej pojedynczy certyfikat jest importowany. Powinieneś być w stanie konwertować certyfikaty do formatu PKCS # 7 za pomocą polecenia openssl, via openssl crl2pkcs7.

+0

Mam już certyfikaty w PKCS # 7 format. CA wysłało mi je w e-mailu. Certyfikaty zostały pomyślnie dodane do magazynu kluczy za pomocą następującej komendy: keytool -import -trustcacerts -file certificate.p7b -keystore keystore -storepass -alias "myalias" Thank you! –

+10

Nie działa dla mnie. Otrzymuję błąd: 'keytool error: java.lang.Exception: Input not a X.509 certificate'. Plik p7p został utworzony poprzez: 'openssl crl2pkcs7 -nocrl -certfile cacert.pem -certfile client-cert.pem -out outfile.p7b' –

+2

Post tutaj:' http: // stackoverflow.com/a/22028156/1817029' mówi, że keytool nie może importować plików p7p! –

14

I rozwiązać problem przez cat'ing wszystkie PEMS razem:

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 nie wiedział, co zrobić z PKCS7 sformatowanej klucz)

mam wszystkie PEMS z letsencrypt

+0

Ładne rozwiązanie, p7b woud nie jest dla mnie zaimportowane. – cen

+0

Dla mnie też. Aby uzyskać ten klucz prywatny, ta druga odpowiedź była przydatna: https://security.stackexchange.com/a/66865/141918 –