Spring Boot SSL握手异常:无法https://example.com/auth/realms/services/.well-known/openid-configuration在Keycloak身份验证上从www.example.com加载URL

nuypyhwy  于 2023-03-29  发布在  Spring
关注(0)|答案(1)|浏览(181)

我正在使用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

我可以覆盖连接以信任所有证书吗?

jhdbpxl9

jhdbpxl91#

不,不要尝试配置JDK / JRE以信任具有未知根授权的所有证书。
两种解决方案:

  • https://example.com/auth上为Keycloak示例使用一个具有受信任的根授权的证书(使用像letsencrypt这样的工具生成一个证书,然后在keycloak.conf中指向它)
  • 将keycloak示例使用的自签名证书添加到spring应用程序运行的JRE / JDK的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一起使用以获取替代方案。

相关问题