Создаём цепочку сертификатов в убывающем порядке (сначала корневой, потом промежуточный1, промежуточный2):
# cat CAroot.crt intermediate_l1.crt intermediate_l2.crt > chain.crt
Генерируем p12-сертификат (обязательно пароль при экспорте ставим такой же, как и на файл keystore):
# openssl pkcs12 -export -chain -in domain.crt -inkey domain.key -out domain.p12 -name tomcat -CAfile chain.crt
Удаляем старый (если есть)
# keytool -delete -alias tomcat -keystore keystore
Импортируем новый:
# keytool -importkeystore -destkeystore keystore -srckeystore domain.p12 -alias tomcat
Посмотреть текущие сертификаты:
# keytool -list -keystore keystore -v | less
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: tomcat
Creation date: Aug 4, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 4
Certificate[1]:
...
Как видно, у нас 1 сертификат с цепочкой из 4-ох внутри.
Ошибки
Error:
java.io.IOException: Illegal header: -----BEGIN CERTIFICATE-----
Solution:
Удалите лишние пробелы в начале/конце строки —–BEGIN CERTIFICATE—–. Учтите, что в tomcat8 должно быть именно 5 дефисов.
Error:
java.security.UnrecoverableKeyException: Cannot recover key
Solution:
Пароль на экспортируемый файл p12 был отличен от пароля на базу keystore. Установите одинаковый пароль.
Error:
Failed to establish chain from reply
Solution:
Нарушена цепочка сертификатов при импорте. Импортируйте заново.
Error:
Error unable to get issuer certificate getting chain.
Solution:
Не хватает сертификата, которым подписаны нижестоящие. Добавьте все вышестоящие (включая корневой)