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

如何让Spring Boot 2应用基于Bouncy Castle满足FIPS 140-2合规要求

Spring Boot 2 整合 BouncyCastle FIPS 实现TLS合规配置步骤

一、现有冗余配置清理

  • 重复的Provider注册逻辑删除:如果选择修改JDK的java.security配置方式,就不需要在启动类main方法、Cipher Bean中重复调用Security.addProvider(),注意调整java.security中所有security.provider的序号,保证org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider排在第一位,优先级最高。如果不想修改JDK配置,删掉java.security的新增配置,只在启动类main方法最开头注册Provider即可,代码如下:
public static void main(String[] args) throws Exception {
    // 放在所有逻辑最前面,设置优先级为1
    Security.insertProviderAt(new BouncyCastleFipsProvider(), 1);
    SpringApplication.run(Application.class, args);
}
  • 依赖修正:当前引入的bcpkix-jdk15on是普通非FIPS版本,和bc-fips不兼容,替换为FIPS版本的依赖:
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bc-fips</artifactId>
    <version>1.0.2.1</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-fips</artifactId>
    <version>1.0.7</version>
</dependency>

二、新增TLS适配配置

1. application.properties 新增SSL配置

在原有SSL配置基础上增加以下参数:

# 指定SSL provider为BC FIPS
server.ssl.provider=BCFIPS
# 只启用FIPS合规的TLS版本
server.ssl.enabled-protocols=TLSv1.2,TLSv1.3
# 配置FIPS允许的加密套件,过滤弱加密算法
server.ssl.ciphers=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

2. 配置内置Tomcat强制使用BC FIPS的SSLContext

新增配置类,自定义Tomcat Web容器的SSL配置:

import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.net.SSLHostConfig;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatSslConfig {

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> sslCustomizer() {
        return factory -> factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
            if (connector.getSecure()) {
                SSLHostConfig[] sslHostConfigs = connector.getProtocolHandler().findSslHostConfigs();
                for (SSLHostConfig sslHostConfig : sslHostConfigs) {
                    // 强制指定SSL provider为BCFIPS
                    sslHostConfig.setSslProvider("BCFIPS");
                }
            }
        });
    }
}

三、现有Cipher Bean用法说明

你当前配置的cbcCipher Bean不需要参与TLS链路的配置,该Bean是给业务代码做对称加解密时直接注入使用的,保证业务侧的加解密逻辑也符合FIPS合规要求,用法示例:

@Service
public class EncryptService {
    @Autowired
    private Cipher cbcCipher;
    
    // 业务加解密逻辑直接使用该Cipher实例即可
}

四、生效验证

启动应用时添加JVM参数-Djavax.net.debug=ssl,观察启动日志:

  • SSLContext初始化日志中会显示provider为BCFIPS
  • TLS握手日志中使用的加密套件为你配置的FIPS合规套件
  • 也可在代码中调用Security.getProviders()[0].getName(),确认返回值为BCFIPS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:48:02