Mam klasę API która wystawia metody do robienia requestów (nie pisana przeze mnie - dostałem ją od klienta). Dostałem też certyfikat (.crt) klucz prywatny i hasło.
Jak dodaje to sobie do ustawień Postmana to bez problemu mogę robić zapytania do tego API.
Potrzebuję natomiast robić requesty z kodu Javy. Nie wiem czy dobrze zrobiłem ale za pomocą openssl zrobiłem sobie plik z rozszerzeniem *.p12 a następnie wczytałem to do KeyManager'a:
File clientCertificatePath = new File("PathToCertificate.p12");
String clientPassword = "***********";
KeyStore clientStore = KeyStore.getInstance("PKCS12");
clientStore.load(new FileInputStream(clientCertificatePath), clientPassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientStore, clientPassword.toCharArray());
KeyManager[] kms = kmf.getKeyManagers();
ApiClient client = new ApiClient();
client.setKeyManagers(kms);
Jak widać w ostatniej linijce wrzucam tego keyManagera do API klienta.
Niestety jak robię request to i tak mi się to sypie:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:290)
at java.base/sun.security.validator.Validator.validate(Validator.java:264)
Zaimportowałem także certyfikat *.crt do pliku cacerts w jre javy.
Jak się przez to debuguje to widzę że mój KeyManager ma wczytany ten certyfikat i klucz prywatny a gdzieś niżej już w kodzie Javy jest robiona jakaś walidacja która się wywala.
Jakieś pomysły?