У меня есть два приложения Spring Boot, каждое из которых работает в своем собственном док-контейнере.
Одно из них - REST Client, а другое - REST API.
Когда клиент вызывает API (т. Е. GET https://localhost:8443/api/someResource
), Я получаю следующую ошибку:
Причина: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Ошибка проверки пути PKIX: java.security.cert.CertPathValidatorException:Сбой проверки подписи
Каждое приложение для весенней загрузки имеет свое собственное хранилище ключей и самозаверяющий сертификат, хранящийся в src / main / resources / keystore.p12
..Вот что у меня в файлах application.yml: следующие свойства:
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: somethingsecure
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: client or server (depending which .yml file your looking at)
Я проверил это вне Docker и все работало нормально!Я просто экспортировал сертификат API из файла keystore.p12 и импортировал его в мой файл JRA cacerts.
Как видно из моего файла REST Client Docker, я делаю там то же самое:
FROM openjdk:8-jdk-alpine
EXPOSE 8443
WORKDIR /usr/src/app
COPY client.jar client.jar
COPY server.crt server.crt
RUN keytool -v -import -noprompt -alias server -file server.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "client.jar"]
Я включил отладку SSL и вижу следующее:
trustStore is: /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts
trustStore type is : jks
trustStore provider is :
init truststore
...
adding as trusted cert:
Subject: CN=localhost, OU=Development, O=Microgen, L=Fleet, ST=Hampshire, C=UK
Issuer: CN=localhost, OU=Development, O=Microgen, L=Fleet, ST=Hampshire, C=UK
Algorithm: RSA; Serial number: 0x4c1fbbc3
Valid from Mon Apr 16 09:49:33 GMT 2018 until Tue Apr 16 09:49:33 GMT 2019
Есть идеи?
Спасибо,
Бен