You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

升级至JDK 1.8.0_16X后Keycloak Proxy无法工作的SSL连接问题

解决Java 1.8.0_16X升级后Keycloak Proxy SSL连接异常问题

这个问题我之前排查过,根源是Java 8u161及以后的版本对SSL内部API做了调整——Oracle移除了sun.security.ssl.SupportedEllipticPointFormatsExtension这个内部类,而旧版本的Keycloak Proxy正好依赖了这个非公开的API,所以升级Java后就会抛出NoClassDefFoundError

你遇到的异常完整栈信息应该是这样的:

Exception in thread "XNIO-1 task-2" java.lang.NoClassDefFoundError: sun/security/ssl/SupportedEllipticPointFormatsExtension
at sun.security.ssl.HelloExtensions.(HelloExtensions.java:84)
at sun.security.ssl.HandshakeMessage$ClientHello.(HandshakeMessage.java:245)
at sun.security.ssl.ServerHandshaker.processMessage(...)

下面给你几个可行的解决办法:

  • 临时应急:降级Java版本
    把Java退回到1.8.0_160或者更早的版本,这个办法最快,能立刻恢复Keycloak Proxy的正常工作,适合需要先恢复服务再做长期规划的场景。

  • 长期根治:升级Keycloak到兼容版本
    Keycloak官方在后续的版本(比如4.8.3.Final及以后)修复了这个依赖内部API的问题,建议你升级到最新的稳定版,或者至少升级到明确标注支持Java 8u161+的版本。升级前记得备份配置和数据,避免出现意外。

  • 特殊场景:修改Proxy代码(不推荐)
    如果暂时无法升级Keycloak,你可以尝试修改Keycloak Proxy中依赖这个类的代码,替换成Java公开的SSL API。但这个办法需要你对Keycloak的源码有一定了解,而且后续升级Keycloak时可能会有冲突,所以只作为最后备选。

内容的提问来源于stack exchange,提问作者Laura Ricco

火山引擎 最新活动