У меня есть несколько микросервисов весенней загрузки, и я включил https.
В основном у меня есть служба конфигурации, служба обнаружения и служба приложений. Служба конфигурации содержит файлы свойств для обнаружения и службы приложений. Когда служба обнаружения и приложений запускается, они загружают свои свойства с сервера конфигурации. Каждая служба содержит каждый собственный файл хранилища ключей с самоподписанным сертификатом. На локальном компьютере они работают правильно, и я могу получить к ним доступ через https. Вот что у меня есть:
config_srvc:
security:
require-ssl: true
server:
port: 8888
ssl:
enabled: true
key-store-type: PKCS12
key-store: classpath:keystore-config-devel.p12
key-alias: config-devel
key-store-password: password
key-password: password
...
discovery_srvc:
eureka:
instance:
hostname: localhost
server:
ssl:
key-store-type: PKCS12
key-store: classpath:keystore-discovery-devel.p12
key-alias: discovery-devel
key-store-password: password
key-password: password
...
Когда я попытался запустить их внутри контейнера докеров (используя network = host), сервер конфигурации запустился успешно, и я могу получить доступ к файлам свойств через браузер (https: // локальный: 8888 / обнаружение / devel), но после попытки запустить службу обнаружения я получаю следующую ошибку:
2018-05-02 09:35:07.094 INFO 1 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: https://localhost:8888
2018-05-02 09:35:07.481 WARN 1 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "https://localhost:8888/discovery/devel": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is 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
Есть идеи, в чем проблема с контейнером докеров?
заранее спасибо
Нет, я не использую docker compose. Команда выглядит следующим образом: 'docker run -d --network = host --rm -t --name config_srvc config_srvc' и 'docker run -d --network = host --rm -t --name discovery_srvc discovery_srvc'




Хорошо, я нашел решение
Мне пришлось импортировать сертификат внутри контейнера докеров jre cacerts. Я сделал это, добавив в файл докеров следующее:
COPY config.crt $JAVA_HOME/jre/lib/security
RUN \
cd $JAVA_HOME/jre/lib/security \
&& keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias config -file config.crt
Вы используете docker compose для запуска обоих контейнеров? Если нет, можно будет показать команды запуска докера?