Я настроил HTTPS на сервере Keycloak, поместив сертификат A.crt
в хранилище ключей Java и настроив это хранилище ключей в standalone.xml
. До сих пор HTTPS-доступ хорошо работал от данного клиента. Сертификат подписан промежуточным CA B
, который подписан корневым CA C
.
Теперь у меня возникают проблемы при доступе к Keycloak с другого клиента. В нем говорится: «невозможно получить сертификат локального эмитента» или «сертификат подписан неизвестным органом» (в зависимости от программного обеспечения клиента). Я совершенно уверен, что основной причиной является то, что сертификат CA B.crt
не известен этому клиенту. Сильным показателем является то, что я могу получить доступ к Keycloak с этого клиента с curl --cacert B.crt https://keycloak...
.
Поскольку я не могу предсказать, на каких клиентах будут установлены сертификаты CA, я хотел бы настроить пакет, состоящий из A.crt
, B.crt
и C.crt
, в качестве корневого сертификата. Если бы это был сервер, который непосредственно получил сертификат PEM, я бы использовал пакет, полученный из cat A.crt B.crt C.crt > bundle.crt
, но из-за его использования хранилища ключей Java это не вариант с Keycloak.
Итак, как я могу сохранить комплект сертификатов сервера (если это правильная терминология) в хранилище ключей Java, чтобы Keycloak мог использовать его таким образом, чтобы «все» клиенты могли получить доступ к службе?
ОБНОВЛЕНИЕ Я пытался добавить промежуточный и корневой сертификаты B
и C
в хранилище ключей, уже используемое Keycloak, но это не решило текущую проблему:
keytool -import -alias b -file B.crt -keystore $KEYSTORE
keytool -import -alias c -file C.crt -keystore $KEYSTORE