Куда помещать сертификаты в Tomcat, когда приложение действует как клиент?

Для начала, у меня Tomcat8 настроен на https с действительной сертифицированной ссылкой в ​​xml-файле коннектора.

Примерно так:

    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true" maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" enableLookups="false" keyAlias="https"
           keystoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\keystore.jks"
           keystorePass="changeit"/>

Но мне нужно, чтобы мое веб-приложение подключалось в качестве клиента к стороннему поставщику данных с действующим сертификатом. Куда мне поместить этот дополнительный сертификат? Когда я помещаю в хранилище ключей для соединителя, "https" сертификат - это не первый сертификат, и он ломается. Я, вероятно, смогу исправить это с помощью атрибута keyAlias ​​ в коннекторе ...

Но ... Широко ли приложение хранилищ ключей соединителя? Какой вариант лучше всего подходит для такой установки?

Эта статья в значительной степени суммирует мои варианты, какой из них выбрать? Лучшим вариантом, по-видимому, является передача хранилища ключей с обоими сертификатами в JVM, но как указать соединителю, какой сертификат использовать?

РЕДАКТИРОВАТЬ:

После предложения я отредактировал свой соединитель и хранилище ключей следующим образом: keystore

Теперь я получаю:

Wrapped javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Cause: sun.security.validator.ValidatorException: PKIX path building 
failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target]
0
задан 19 April 2017 в 15:02
2 ответа

В конце я создал одно хранилище ключей (с проводником хранилища ключей в Windows) со всеми необходимыми сертификатами (ключами) и псевдонимами. Затем я заполнил хранилище ключей и trustore как параметры запуска виртуальной машины Java:

  -Djavax.net.ssl.keyStore=%KEYSTORE% 
  -Djavax.net.ssl.keyStorePassword=changeme
  -Djavax.net.ssl.trustStore=%TRUSTSTORE% 
  -Djavax.net.ssl.trustStorePassword=changeme

Такое же хранилище ключей используется в соединителе tomcat с соответствующими keyAlias ​​для HTTPS.

Включение -Djava.net.debug = ssl также очень полезно при отладке.

0
ответ дан 4 December 2019 в 16:17

В нашей среде (tomcat7), если мы используем хранилище ключей java, наш соединитель выглядит так:

<Connector SSLEnabled="true"
    acceptCount="100"
    connectionTimeout="20000"
    executor="tomcatThreadPool"
    keyAlias="tomcat"
    keystoreFile="${catalina.base}/conf/tomcat.keystore"
    keystorePass="changeme"
    maxKeepAliveRequests="15"
    port="443"
    protocol="org.apache.coyote.http11.Http11Protocol"
    redirectPort="8443"
    scheme="https"
    secure="true"/>  

Различия заключаются в $ {catalina.base} (в нашем случае / opt / tomcat / ) вместо $ {user.home} / , и, как вы упомянули keyAlias ​​.

Если вы хотите импортировать ключ в хранилище ключей, вы можете сделать это следующим образом (мы используем это, когда tomcat является клиентом для аутентификации в ADFS):

keytool -importcert -file cert.cer -keystore tomcat.keystore -alias myalias

Я думаю, с хранилищем ключей в $ {catalina.base} и keyAlaias вы сможете решить свой вопрос.

1
ответ дан 4 December 2019 в 16:17

Теги

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