2013-04-17 4 views
23

У меня есть файл с цепочкой сертификатов - Certificate.cer:Как добавить цепочку сертификатов в хранилище ключей?

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

мне нужно добавить эту цепочку сертификатов ключей.
Что я делаю:

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> 

В результате у меня есть только один сертификат в хранилище ключей.
Но должен иметь 3.
Что может быть неправильным?

РЕШЕНИЕ:
CA прислал мне сертификаты в формате PKCS # 7 формате.
Я хранил их в certificate.p7b файл, а затем успешно добавили их в KeyStore по следующей команды:

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

Какая версия KeyTool использовалась? Версия '6-b14' не может импортировать цепочки сертификатов, потому что: // мы можем хранить только один сертификат пользователя для каждого идентификатора. Посмотрите на исходный код:' http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/security/tools/KeyTool.java # KeyTool.doImportIdentityDatabase% 28java.io.InputStream% 29' –

ответ

8

С Keytool человека - он импортирует цепочку сертификатов, если вход будет дан в PKCS формате # 7, в противном случае только один сертификат импортируется. Вы должны иметь возможность конвертировать сертификаты в формат PKCS # 7 с помощью openssl через команду openssl crl2pkcs7.

+0

У меня уже есть сертификаты в PKCS # 7 формат. CA отправил мне их по электронной почте. Сертификаты были успешно добавлены в хранилище ключей по следующей команде: keytool -import -trustcacerts -file certificate.p7b -keystore keystore -storepass -alias "myalias" Спасибо! –

+10

Не работал для меня. Я получаю сообщение об ошибке: 'keytool error: java.lang.Exception: введите не сертификат X.509'. Файл p7p был создан с помощью: 'openssl crl2pkcs7 -nocrl -certfile cacert.pem -certfile client-cert.pem -out outfile.p7b' –

+2

Сообщение здесь:' http: // stackoverflow.com/a/22028156/1817029' говорит, что keytool не может импортировать файлы p7p! –

14

Я решил проблему cat'ing все ПЕМС вместе:

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 не знал, что делать с PKCS7 отформатированный ключа)

Я получил все ПЕМС от letsencrypt

+0

Хорошее решение, p7b woud не импортировать для меня – cen

+0

Работал для меня тоже. Чтобы получить этот закрытый ключ, этот другой ответ был полезен: https://security.stackexchange.com/a/66865/141918 –

Смежные вопросы