Я работал над встраиванием 2 SSL-сертификатов в мой код java, и приведенный ниже код не генерирует никаких ошибок, но когда я пытаюсь получить доступ к API, для которого нужны эти сертификаты, я получаю сообщение об ошибке. Я, очевидно, что-то не так, но потратив значительное количество времени, я не смог решить, что не так.
Вот код, который я использую, ошибка ниже
InputStream certInIssue =
ClassLoader.class.getResourceAsStream("/resources/SSLCerts/Certificate1.cer");
InputStream certInRoot =
ClassLoader.class.getResourceAsStream("/resources/SSLCerts/Certificate.cer");
try {
KeyStore keystore;
keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(null, null);
String password = "R9NNXVSqemsghmvZxkcWTfzCr3pDv5D2";
String tempDir = "C:/Temp/";
BufferedInputStream bis = new BufferedInputStream(certInIssue);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
while (bis.available() > 0) {
java.security.cert.Certificate cert = cf.generateCertificate(bis);
keystore.setCertificateEntry("SSLIssue", cert);
}
bis = new BufferedInputStream(certInRoot);
cf = CertificateFactory.getInstance("X.509");
while (bis.available() > 0) {
java.security.cert.Certificate cert = cf.generateCertificate(bis);
keystore.setCertificateEntry("SSLRoot", cert);
}
certInIssue.close();
certInRoot.close();
OutputStream out = new FileOutputStream(tempDir + "keyserverstore.keystore");
keystore.store(out, password.toCharArray());
out.close();
keystore.load(new FileInputStream(tempDir + "keyserverstore.keystore"),
password.toCharArray());
} catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Но я получаю это исключение:
io.joshworks.restclient.http.exceptions.RestClientException:
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