我正在使用Keycloak进行服务身份验证以生成访问令牌。
然而,当Keycloak试图从https://example.com/auth/realms/services/.well-known/openid-configuration加载URL时,我得到了javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
。
这是从连接到OpenShift容器平台中安装的Keycloak服务器的Sping Boot 应用程序。
当我从本地安装的Keycloak进行测试时,一切都运行良好,当我从 Postman 客户机和/或浏览器运行GET请求时,我实际上可以从https://example.com/auth/realms/services/.well-known/openid-configuration获得属性。
我的application.properties文件具有以下配置
keycloak.realm=services
keycloak.resource=ms-test-service
keycloak.auth-server-url=https://example.com/auth
keycloak.ssl-required=none
keycloak.use-resource-role-mappings=false
我可以覆盖连接以信任所有证书吗?
1条答案
按热度按时间jhdbpxl91#
不,不要尝试配置JDK / JRE以信任具有未知根授权的所有证书。
两种解决方案:
cacerts
文件中对于第二个选项,确保在启动Keycloak时不会动态生成自签名证书(手动generate this certificate并从conf文件指向它)
附1
当Keycloak尝试从https://example.com/auth/realms/services/.well-known/openid-configuration加载URL时
发送请求的不是Keycloak,而是您的Spring应用程序试图从Keycloak加载OpenID配置(错误发生在Spring应用程序的JVM中,拒绝Keycloak服务器SSL证书,而不是相反)。
附2
您正在使用Spring的Keycloak适配器,其为deprecated early 2022,与Spring Security 6 / Boot 3不兼容。请不要这样做。请参阅将Keycloak Spring适配器与Spring Boot 3一起使用以获取替代方案。