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
问题原因
- BCFIPS 1.0.2.4为2020年发布的旧版本,未适配JDK17的安全提供者加载逻辑与TLS协议处理规则
- 全局安全配置中未添加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
相关产品推荐
相关产品推荐

