OpenJDK 1.8.0_312加载BCFIPS外部安全提供者报错问题咨询
问题根因
你遇到的报错是OpenJDK 8u312版本的安全变更直接导致的,核心涉及两项调整:
- 该版本修复了CVE-2021-35550漏洞,收紧了JCE安全提供者的签名校验规则,同时清理了JRE内置信任的过期JCE代码签名根证书。
- 你使用的
bc-fips-1.0.1.jar采用的BouncyCastle官方JCE签名证书,刚好在本次清理的过期证书列表中,导致放在jre/lib/ext目录下的BCFIPS提供者无法通过JRE的签名校验,初始化失败。
另外8u312调整了安全提供者的初始化逻辑:如果配置顺序靠前的提供者加载失败,不再静默跳过继续加载后续提供者,而是会标记安全配置异常,导致后续你配置的com.sun.net.ssl.internal.ssl.Provider BCFIPS(SunJSSE绑定BCFIPS作为底层加密提供者)初始化时,找不到已经加载失败的BCFIPS提供者,最终抛出java.security.NoSuchProviderException: no such provider: BCFIPS错误。
修复方案
- 优先升级BCFIPS依赖到
1.0.2.3及以上版本,新版本的JAR包使用了新的有效JCE代码签名证书,可以正常通过8u312及更高版本的签名校验。 - 若暂时无法升级BCFIPS版本,可以在JVM启动参数中添加
-Djdk.security.allowNonCaAnchor=true临时允许非信任CA签发的JCE提供者签名,该配置会降低加密体系安全性,不建议在生产环境使用。 - 你当前
java.security配置中BCFIPS的加载顺序在SunJSSE之前,符合配置要求,无需调整。
内容的提问来源于stack exchange,提问作者shivaraj malannavar
相关产品推荐
相关产品推荐

