Как проверить сертификат в java spring без установки в cacert - PullRequest
2 голосов
/ 13 марта 2020

Из моего приложения 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?

...