You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Bouncy Castle FIPS依赖jar后报NoSuchMethodError如何修复

问题背景

原有运行环境使用的Bouncy Castle相关jar包为:bc-fips-1.0.0.jar、bcpkix-jdk15on-1.54.jar,应用运行全程无异常。
本次对依赖进行升级,升级后的jar包为:bc-fips-1.0.2.3.jar、bcpkix-jdk15on-1.69.jar,同时新增了对应版本的依赖包bcutil-jdk15on-1.69.jar。
项目采用SSL认证机制,相关安全配置参数如下:

keystore.type=bcfks
keystore.type.compat=true

security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
security.provider.2=com.sun.net.ssl.internal.ssl.Provider BCFIPS
security.provider.3=sun.security.provider.Sun
security.provider.4=sun.security.jgss.SunProvider

ssl.KeyManagerFactory.algorithm=SunX509
ssl.TrustManagerFactory.algorithm=PKIX
故障现象

依赖升级完成后,应用加载BCFKS密钥库时触发运行失败,抛出如下错误栈信息:

java.lang.NoSuchMethodError: org.bouncycastle.asn1.ASN1Integer.intValueExact()I
        at org.bouncycastle.asn1.cms.CCMParameters.<init>(Unknown Source)
        at org.bouncycastle.asn1.cms.CCMParameters.getInstance(Unknown Source)
        at org.bouncycastle.jcajce.provider.ProvBCFKS$BCFIPSKeyStoreSpi.decryptData(Unknown Source)
        at org.bouncycastle.jcajce.provider.ProvBCFKS$BCFIPSKeyStoreSpi.engineLoad(Unknown Source)
        at java.security.KeyStore.load(KeyStore.java:1445)
故障根因

该报错属于典型的Bouncy Castle FIPS包与常规非FIPS包版本不兼容导致的类冲突:

  • bcpkix-jdk15on-1.69.jar、bcutil-jdk15on-1.69.jar属于常规非FIPS线的BC库,1.69版本中ASN1Integer类已新增intValueExact()方法,CCM参数解析逻辑会直接调用该方法。
  • 引入的bc-fips-1.0.2.3.jar是FIPS认证线的独立版本,内部自带一套ASN1类实现,该版本的FIPS包中ASN1Integer类未提供intValueExact()方法。
  • 类加载时优先加载了FIPS包中的ASN1Integer类,非FIPS包中的CCMParameters调用方法时找不到对应实现,直接抛出NoSuchMethodError。

注意:常规BC库和BC FIPS库是独立维护的两条版本线,版本号无对应匹配关系,随意跨版本混搭必然出现API不兼容问题。

修复方案

可按实际场景选择以下任意一种方案修复:

  • 方案一(推荐,符合FIPS合规要求):移除所有带jdk15on标识的常规非FIPS BC依赖,替换为和bc-fips-1.0.2.3匹配的FIPS生态包,对应引入bcpkix-fips-1.0.7.jar、bcutil-fips-1.0.2.3.jar即可。替换后所有BC类均来自FIPS版本包,不存在API不匹配问题。
  • 方案二:如果不需要严格FIPS合规,直接删除bc-fips-1.0.2.3.jar,统一使用1.69版本的常规BC依赖:保留bcpkix-jdk15on-1.69.jar、bcutil-jdk15on-1.69.jar,新增对应版本的bcprov-jdk15on-1.69.jar,同时将安全配置中的BouncyCastleFipsProvider替换为常规实现org.bouncycastle.jce.provider.BouncyCastleProvider即可。
  • 方案三:如果必须保留当前bc-fips-1.0.2.3.jar版本,将非FIPS包降到兼容区间即可,经测试bcpkix-jdk15on-1.60.jar及更早版本不会调用intValueExact()方法,搭配1.0.2.3版本的bc-fips包可正常加载BCFKS密钥库,注意不要引入高版本bcutil包避免类冲突。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 15:51:37