Micronaut启用SSL时BCFKS密钥库未找到问题求助
Micronaut 3.8.7 启用BCFKS类型密钥库SSL失败的解决方案
在基于Zulu OpenJDK 11的Micronaut 3.8.7应用中启用SSL,使用BouncyCastle的BCFKS类型密钥库,按以下配置启动时失败:
ssl: enabled: true key-store: path: file:usersDataKeyStore.keystore password: 123456 type: BCFKS provider: org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
核心报错信息:
18:02:19.187 [default-nioEventLoopGroup-1-1] WARN io.netty.channel.ChannelInitializer - Failed to initialize a channel. Closing: [id: 0x68615a0a] io.micronaut.http.ssl.SslConfigurationException: An error occurred configuring SSL at io.micronaut.http.ssl.SslBuilder.getKeyManagerFactory(SslBuilder.java:111) ... Caused by: java.security.KeyStoreException: BCFKS not found ... Caused by: java.security.NoSuchAlgorithmException: BCFKS KeyStore not available ...
当前使用的依赖:
Micronaut version : 3.8.7 Open-JDK : 11 (zulu) Using the below dependencies implementation("org.bouncycastle:bc-fips:1.0.2.3") implementation("org.bouncycastle:bcpkix-fips:1.0.7") implementation("org.bouncycastle:bcpkix-jdk15on:1.47")
问题分析与解决步骤
1. 清理冲突依赖
移除非FIPS版本的bcpkix-jdk15on:1.47,该依赖与FIPS合规的bc-fips、bcpkix-fips存在版本冲突,会导致Provider加载异常。仅保留以下依赖:
implementation("org.bouncycastle:bc-fips:1.0.2.3") implementation("org.bouncycastle:bcpkix-fips:1.0.7")
2. 正确注册BouncyCastle FIPS Provider
BCFKS密钥库需要依赖BouncyCastle FIPS Provider,需确保其被JVM正确加载,有两种方式:
- 代码显式注册:在应用启动类中添加静态代码块注册Provider:
import org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider; import java.security.Security; import io.micronaut.runtime.Micronaut; public class Application { static { Security.addProvider(new BouncyCastleFipsProvider()); } public static void main(String[] args) { Micronaut.run(Application.class, args); } } - JVM参数配置:修改JVM启动参数,指定自定义安全配置文件:
在-Djava.security.properties=/path/to/your/custom-security.propertiescustom-security.properties中添加Provider配置(序号可根据实际情况调整,避免覆盖默认Provider):security.provider.10=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
3. 验证密钥库格式
确保密钥库确实是BCFKS格式,使用BouncyCastle工具验证:
keytool -list -keystore usersDataKeyStore.keystore -storetype BCFKS -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -storepass 123456
若验证失败,需重新生成BCFKS格式的密钥库。
4. 调整Micronaut SSL配置
配置中可使用Provider别名BCFIPS代替全类名(注册后Provider默认别名即为BCFIPS),简化配置如下:
ssl: enabled: true key-store: path: file:usersDataKeyStore.keystore password: 123456 type: BCFKS provider: BCFIPS
内容的提问来源于stack exchange,提问作者Raghav D
相关产品推荐
相关产品推荐

