Tomcat 9.0.93+JVM17+WinServer2022开启FIPS模式报错排查
排查Windows Server 2022 + JDK17 + Tomcat9.0.93 FIPS模式启动报错的步骤
针对启动时出现的The FIPS provider must be configured as the default provider错误,按以下环节逐一排查:
1. 确认JVM的FIPS提供商确实设为默认
- JDK17的
java.security路径已改为[JDK安装目录]/conf/security/java.security,打开后检查security.provider.N的排序:- 必须让FIPS合规的提供商(比如
SunPKCS11或Windows系统级FIPS提供者)排在第一位,示例配置:security.provider.1=SunPKCS11 fips.cfg security.provider.2=SUN security.provider.3=SunRsaSign ... - 对应的
fips.cfg要放在同目录下,配置需指向Windows的FIPS模块,示例:name=SunPKCS11-Windows library=C:\\Windows\\System32\\bcrypt.dll attributes=SunPKCS11-FIPS
- 必须让FIPS合规的提供商(比如
- 执行命令验证提供商加载情况:
java -Djava.security.debug=provider -version,输出中要确认默认提供商是FIPS合规的,且无加载失败日志。
2. 检查Tomcat启动时的JVM配置是否正确
- 查看Tomcat的
bin/setenv.bat(无则新建),确保没有通过-Djava.security.properties参数覆盖全局的java.security配置 - 启动Tomcat时添加参数
-Djava.security.debug=all,查看启动日志里的提供商加载顺序,确认默认提供商为FIPS合规项 - 如果Tomcat以Windows服务运行,打开服务属性的「Java」标签,检查启动参数里有没有冲突的安全配置,确保继承JVM的全局FIPS设置
3. 验证APR库的FIPS兼容性
- 确认Tomcat使用的
tcnative-1.dll(APR库)是官方提供的、兼容JDK17和FIPS模式的版本 - 调整
server.xml里的AprLifecycleListener配置,明确指定SSLProvider(如果用OpenSSL需确保是FIPS认证版本):<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" FIPSMode="on" SSLProvider="OpenSSL"/> - 确保系统路径中优先加载的OpenSSL库是FIPS认证版本,避免与非合规版本冲突
4. 深层验证系统FIPS模式配置
- 打开本地组策略编辑器(
gpedit.msc),导航到「计算机配置>Windows设置>安全设置>本地策略>安全选项」,确认「系统加密:使用符合FIPS标准的加密算法来加密、哈希和签名」已启用 - 检查注册表项
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy下的Enabled值是否为1(DWORD类型) - 重启服务器,确保系统FIPS模式的修改完全生效(部分配置需重启后JVM才能识别)
5. 排除JVM缓存或配置冲突
- 删除JVM安全缓存目录:
%USERPROFILE%\.java\security下的所有文件 - 使用全新解压的JDK17环境测试,配置好FIPS后启动Tomcat,排查是否为原有JDK环境的配置残留问题
内容的提问来源于stack exchange,提问作者Timothy Ward
相关产品推荐
相关产品推荐

