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

Java 8 Spring Boot如何获取java.security中的FIPS安全提供者列表?

Java 8 获取FIPS提供者列表的解决方案

问题背景

我的Spring Boot应用基于Java 8运行,JDK8安装目录下jdk1.8.0_372\jre\lib\security中的java.security文件包含两类安全提供者配置:常规的security.provider列表,以及FIPS模式激活时使用的fips.provider列表。尝试用以下代码仅能获取常规列表,无法获取FIPS提供者列表:

java.security.Provider[] providers = java.security.Security.getProviders();
for (java.security.Provider provider : providers) {
    System.out.println("Provider: " + provider.getName());
}       

解决方案

fips.provider列表仅在JVM激活FIPS模式时才会被加载生效,常规模式下不会自动加载。你可以根据需求选择以下两种方式:

方式1:激活FIPS模式后获取已加载的提供者

要让JVM加载fips.provider列表,需在启动Spring Boot应用时添加FIPS激活参数,同时确保java.security中已正确配置fips.provider条目:

  • 在应用启动参数中添加:-Dcom.sun.security.enableFIPS=true(Oracle JDK 8激活FIPS的标准参数,不同厂商JDK可能略有差异)
  • 启动应用后,原代码Security.getProviders()即可获取到FIPS模式下的提供者列表

方式2:直接读取配置文件中的fips.provider列表(无需激活FIPS模式)

如果只是想读取java.security文件中定义的fips.provider配置,无需激活FIPS模式,可以手动加载配置文件解析:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class FipsProviderLoader {
    public void printFipsProviders() throws IOException {
        // 获取当前JRE的java.security配置文件路径
        String securityConfigPath = System.getProperty("java.home") + "/lib/security/java.security";
        Properties securityProps = new Properties();
        
        try (FileInputStream fis = new FileInputStream(securityConfigPath)) {
            securityProps.load(fis);
        }

        // 遍历并打印所有fips.provider配置项
        for (String propKey : securityProps.stringPropertyNames()) {
            if (propKey.startsWith("fips.provider.")) {
                System.out.println("FIPS Provider " + propKey + ": " + securityProps.getProperty(propKey));
            }
        }
    }
}

在Spring Boot应用启动时调用printFipsProviders()方法即可输出配置文件中的FIPS提供者列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:55:12