Из моего приложения Java я хочу подключиться к удаленному хосту и получить ответ от этого хоста через rest. У меня есть сертификат этого сайта, поэтому я установил его в lib\security\cacerts
в моей локальной среде.
Затем я использовал следующий код для подключения:
URL obj = new URL("https://ip/security/sso/?");
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
int responseCode = con.getResponseCode();
Он отлично работает локально, и я получаю ответ 200, как и ожидалось.
Но когда я хочу развернуть этот код в среде Kubernetes, эта команда говорит, что не может установить этот сертификат в cacerts (я не очень разбираюсь в Kubernetes) и предложила мне сохранить сертификат в каком-либо месте и прочитать этот сертификат .jks
через код Java, а затем подключиться к сайту https.
Я не уверен, как написать этот код. Я пробовал этот способ, но он не работал:
final String allPassword = "changeit";
SSLContext sslContext = null;
try {
sslContext = SSLContextBuilder.create()
.loadKeyMaterial(ResourceUtils.getFile("C:\\certificate\\abc.jks"), allPassword.toCharArray(),
allPassword.toCharArray())
.build();
} catch (KeyManagementException | UnrecoverableKeyException | NoSuchAlgorithmException | KeyStoreException
| CertificateException | IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
HttpClient client = HttpClients.custom().setSSLContext(sslContext).build();
HttpGet getMethod = new HttpGet(obj.toString());
HttpResponse response = client.execute(getMethod);
Я получаю ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException
Есть ли у вас какие-либо идеи, как я могу проверить этот сертификат через код, не устанавливая его в cacert?