У меня есть клиент RestTemplate, встроенный в приложение SpringBoot, как показано ниже,
@SpringBootApplication
public class SecureAppClientApplication {
private static final Logger LOG = LoggerFactory.getLogger(SecureAppClientApplication.class);
public static void main(String[] args) {
SpringApplication.run(SecureAppClientApplication.class, args);
LOG.debug("Testing connecting to secure site");
HttpsURLConnection.setDefaultHostnameVerifier ((hostname, session) -> false);
RestTemplate restTemp = new RestTemplate();
String greetings = restTemp.getForObject("https://my.secure.service", String.class);
LOG.debug("Received greetings from secured server ---> " + greetings );
}
}
application.proerties, для которого читается что-то вроде,
server.ssl.key-store=myKeyStore.jks
server.ssl.key-store-password=Store@123
server.ssl.key-alias=myClient
server.ssl.key-password=Key@1234
server.ssl.trust-store=cacerts
server.ssl.trust-store-password=changeit
Есть и другие свойства, но не связанные с HTTPS (например, ведение журнала, JPA и т. д.).
Теперь, с сертификатом хоста, экспортированным из браузера (Mozilla), я установил его в
myKeyStore.jks присутствует в пути к классам,cacerts присутствует в пути к классам,cacerts в доме JDK иcacerts в доме JREТем не менее я получаю ошибку проверки PKIX, корнем которой является
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Не знаю, с чего начать поиск неисправностей. Это
openssl.keytool -importcert -file certificate.cer -keystore keystore.jks -alias my-aliasОБНОВИТЬ
Похоже, проблема с сертификатом. Оказывается, получение сертификата из браузера не особо помогает. Я связался с администратором хоста сервера и получил 3 сертификата для установки. Глупо полагаться на сертификат браузера. Наверное, есть что-то вроде certificate chaining.
ЗАКЛЮЧЕНИЕ Убедитесь, что вы получили соответствующие сертификаты в реальном случае, потому что мир просто не полагается на простые сертификаты, доступные в браузерах, особенно для вызовов веб-сервисов.
Я считаю, что файл cacerts, поставляемый с установкой Java, служит trust-store. Я уже упоминал, где установлен весь сертификат. Мне нужно что-то еще добавить?




В данном случае это были правильные сертификаты, так как я мало о них знал. Возможно, вам потребуется несколько сертификатов.
Похоже, вам нужно настроить доверие, но вместо этого вы добавляете ключи сайта в свое хранилище ключей, если я не понимаю что-то из вашего примера. Вы пытались использовать keytool для добавления сертификата сайтов в ваше хранилище доверенных сертификатов?