невозможно найти действительный путь сертификации к запрошенной цели - Keycloak - Springboot - самозаверяющий сертификат - Тесты - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть тесты интеграции в моем весеннем загрузочном приложении, и некоторые тесты должны получить токен от Keycloak.Каждое общение происходит по протоколу SSL с самозаверяющим сертификатом.

При запуске этих тестов я получил следующее исключение:

SunCertPathBuilderException: unable to find valid certification path to requested target

Эта проблема похожа на Принять самозаверяющий ssl серверасертификат в клиенте Java , но это решение не работает для меня.

Вот где я получаю токен:

private AccessTokenResponse getToken() throws GeneralSecurityException {        
        Keycloak keycloak = Keycloak.getInstance(keycloakAuthServerUrl, keycloakRealm, 
            login, password, keycloakResource, keycloakCredentialsSecret);
        return keycloak.tokenManager().getAccessToken();
    }

1 Ответ

0 голосов
/ 12 февраля 2019

Как предложено в Примите самоподписанный ssl-сертификат сервера в Java-клиенте , создайте собственный менеджер доверия:

import javax.net.ssl.X509TrustManager;

public class TestTrustManager implements X509TrustManager {

        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[0];
        }
        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
        }
        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
        }
}

Затем добавьте его в "конструктор" keycloak:

private AccessTokenResponse getToken() throws GeneralSecurityException {
        // Install the all-trusting trust manager
        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, new TrustManager[] { new TestTrustManager() }, new java.security.SecureRandom());

        Keycloak keycloak = Keycloak.getInstance(keycloakAuthServerUrl, keycloakRealm, 
            login, password, keycloakResource, keycloakCredentialsSecret, sslContext); // <--- !!! ADD IT HERE !!!
        return keycloak.tokenManager().getAccessToken();
    }
...