spring-boot - 无法找到请求目标的有效证书路径 - Keycloak - Springboot - 自签名证书 - 测试

标签 spring-boot ssl junit keycloak

我在我的 spring boot 应用程序中进行了集成测试,一些测试需要从 Keycloak 获取 token 。每次通信都通过带有自签名证书的 SSL。

启动这些测试时我遇到了异常:

SunCertPathBuilderException: unable to find valid certification path to requested target

问题似乎类似于 Accept server's self-signed ssl certificate in Java client但此解决方案对我不起作用。

这是我获得 token 的地方:

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

最佳答案

Accept server's self-signed ssl certificate in Java client 中的建议,创建自定义信任管理器:

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) {
        }
}

然后将其添加到 key 斗篷“构造函数”中:

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();
    }

关于spring-boot - 无法找到请求目标的有效证书路径 - Keycloak - Springboot - 自签名证书 - 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54647227/

相关文章:

java - AWS SES 在 Spring Boot Java 中实现,无需使用凭证

database - 什么时候需要提供CA文件?

ssl - nginx 配置不重定向 80-->443 尽管有效

java - 有没有一种方法可以让一个测试函数在 JUnit 中显示为多个单元测试?

spring-boot - 单元测试时如何模拟ElasticsearchOperations(spring-data-elasticsearch v.4.0.3)

python - 如何在发送到 Spring Boot 休息 Controller 的请求正文中保留换行符

java - 找不到数据库 "mem:",当我尝试连接 ht2 数据库时 IFEXISTS=true

ruby - Rails 4 - config.ssl_options 不起作用

java - 如何将带有静态方法的 Groovy 特征应用到 Junit 测试类?

spring-mvc - MockMVC 将测试 Controller 与 session 范围 bean 集成