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

JDK17使用BCFIPS 1.0.2.4报TLSv1.2 SSLContext不可用问题求助

问题:JDK17 + BCFIPS 1.0.2.4 抛出NoSuchAlgorithmException: TLSv1.2 SSLContext not available

问题详情

  • 运行环境:JDK 17,BCFIPS jar 版本1.0.2.4
  • 报错信息:java.security.NoSuchAlgorithmException: TLSv1.2 SSLContext not available
  • 背景:代码在JDK11下运行正常,升级至JDK17后触发错误;尝试切换到TLSv1.3协议仍失败
  • 确认JDK17支持的TLS协议包含:TLSv1.3, TLSv1.2, TLSv1.1, TLSv1, SSLv3, SSLv2Hello
  • 当前java.security配置如下:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
# List of providers and their preference orders (see above):
#
security.provider.1=SUN
security.provider.2=SunRsaSign
security.provider.3=SunEC
security.provider.4=SunJSSE
security.provider.5=SunJCE
security.provider.6=SunJGSS
security.provider.7=SunSASL
security.provider.8=XMLDSig
security.provider.9=SunPCSC
security.provider.10=JdkLDAP
security.provider.11=JdkSASL
security.provider.12=SunPKCS11

问题原因

  1. BCFIPS 1.0.2.4为2020年发布的旧版本,未适配JDK17的安全提供者加载逻辑与TLS协议处理规则
  2. 全局安全配置中未添加BCFIPS提供者,代码尝试从默认JDK提供者获取TLS上下文时,因BCFIPS的FIPS合规限制与JDK17安全策略冲突,无法找到对应算法实现

解决方法

1. 升级BCFIPS到JDK17兼容版本

BCFIPS 1.0.2.4不支持JDK17,建议升级至1.0.2.10及以上版本(该版本开始适配JDK17),或直接使用最新稳定版。

2. 在java.security中配置BCFIPS安全提供者

找到security.provider.N配置段,将BCFIPS提供者添加到优先级靠前的位置(例如第1位,或在SunJSSE之前),示例配置:

security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
security.provider.2=SUN
security.provider.3=SunRsaSign
security.provider.4=SunEC
security.provider.5=SunJSSE
# 保留原其余提供者配置...

确保JVM启动时能加载到BCFIPS的jar包,避免类加载异常。

3. 代码中显式指定BCFIPS提供者获取SSLContext

若不想修改全局安全配置,可在代码中直接指定使用BCFIPS提供者创建SSLContext:

// TLSv1.2
SSLContext sslContext = SSLContext.getInstance("TLSv1.2", "BCFIPS");
// TLSv1.3
SSLContext sslContextTls13 = SSLContext.getInstance("TLSv1.3", "BCFIPS");

4. 验证FIPS模式初始化

BCFIPS需要启用FIPS模式才能正常工作,可通过以下方式初始化:

  • JVM启动参数添加:
    -Dorg.bouncycastle.fips.approved_only=true
    
  • 或代码中提前加载提供者:
    Security.insertProviderAt(new BouncyCastleFipsProvider(), 1);
    

5. 检查JDK17安全策略

确认jdk.tls.disabledAlgorithms未禁用TLSv1.2/TLSv1.3(当前配置无问题),同时检查jdk.certpath.disabledAlgorithms等其他安全配置是否存在限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:09:58