Задать вопрос

Как добавить цепочку сертификатов pkcs12 в java8 для взаимной аутентификации TLS?

Добрый день.

Есть веб-сервис с REST API, требующий взаимной аутентификации TLS (1.2).
Есть JMS-сервер (Aurea) с java8, которому надо обратиться к этому сервису.

Выданная сервисом цепочка в pkcs12 СА-провайдер-клиент(+клиентский ключ) успешно применяется в тестовом запросе в Postman, просто указанием предоставленного .pfx файла в настройках.
А из JMS не удается обратиться к сервису:

1) в java, в \lib\security\cacerts при импорте цепочки pkcs12 импортируется только закрытый ключ

keytool.exe
 -importkeystore
 -destkeystore
 .\cacerts
 -deststoretype JKS
 -deststorepass changeit
 -srckeystore
 d:\_work\test.pfx
 -srcstoretype PKCS12
 -srcstorepass xxx

Entry for alias {...} successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

!!! 1 entries successfully imported
в цепочке импортируется только закрытый ключ клиента, без 3-х сертификатов

2. В локальном win mmc-Сертификаты импортирую цепочку .pfx и экспортирую три сертификата отдельными файлами
Через keytool импортирую их

keytool.exe
 -import
 -deststorepass changeit
 -trustcacerts
 -keystore
 .\cacerts
 -noprompt
 -alias ca
 -file "d:\_work\ca.cer"
..
 -alias ca_serv
 -file "d:\_work\serv_der.cer"
...
 -alias client
 -file "d:\_work\clnt.cer"

Certificate was added to keystore


После импорта запрос к API из JMS возвращает:
400 Bad Request
No required SSL certificate was sent


В локальном хранилище cacerts уже есть три сертификата и закрытый ключ:
keytool.exe -list -keystore ./cacerts | findstr /V jdk | findstr /V finger

ca_serv, 04.12.2025, trustedCertEntry,
ca, 04.12.2025, trustedCertEntry,
{...}, 04.12.2025, PrivateKeyEntry,
clnt, 04.12.2025, trustedCertEntry,


Смущает, что после импорта pkcs12 - keytool стал постоянно выдавать варнинг.
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore ./cacerts -destkeystore ./cacerts -deststoretype pkcs12".
Keystore type: JKS
Keystore provider: SUN


Попытка выполнить совет и сконвертировать в PKCS12 привела вообще к ошибке:

the trustAnchors parameter must be non-empty

Подскажите, пожалуйста, что может быть неверно выполнено?
В каком направлении пробовать искать решение?
  • Вопрос задан
  • 60 просмотров
Подписаться 2 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillbox
    Курс Java-разработчик
    4 месяца
    Далее
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы