ubi8-minimal镜像下OpenShift部署React应用报FIPS禁用错误
报错信息
在OpenShift平台使用RedHat ubi8-minimal基础镜像部署React应用时,触发如下错误:
Error: error:060800C8:digital envelope routines:EVP_DigestInit_ex:disabled for FIPS
问题根因
- RedHat ubi8-minimal镜像默认适配宿主机(OpenShift节点)的FIPS(联邦信息处理标准)合规模式,该模式下OpenSSL会禁用所有未纳入FIPS核准列表的加密、哈希算法。
- React项目构建常用的工具链(react-scripts、Webpack、Vite等)默认会使用MD4、MD5等非FIPS合规的哈希算法生成静态资源chunk哈希、缓存标识,Node.js调用OpenSSL相关接口时会被FIPS规则拦截,抛出该错误。
- 若使用官网通用二进制包、nvm安装的Node.js,未经过RHEL FIPS适配,会进一步提升该问题的触发概率。注意:手动修改镜像内
/etc/ssl/openssl.cnf配置无法关闭FIPS,ubi8的FIPS状态由宿主机内核参数控制,镜像内配置修改不生效。
修复方案
按照优先级从高到低可选择以下方案:
方案1:适配FIPS合规要求(推荐,适用于强制FIPS的集群)
将构建工具的哈希算法替换为FIPS核准的SHA256算法,从根源规避非合规算法调用:
- 若为CRA(react-scripts)创建的项目,可通过craco/react-app-rewired修改Webpack配置:
// craco.config.js module.exports = { webpack: { configure: (config) => { config.output.hashFunction = 'sha256'; return config; } } }
- 若为Vite创建的React项目,修改rollup构建配置即可:
// vite.config.js import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()], build: { rollupOptions: { output: { entryFileNames: `assets/[name]-[sha256:hash].js`, chunkFileNames: `assets/[name]-[sha256:hash].js`, assetFileNames: `assets/[name]-[sha256:hash].[ext]` } } } });
同时建议使用ubi8官方源提供的适配过FIPS的Node.js包,不要使用第三方安装的Node版本:
# Dockerfile内安装Node示例 microdnf install -y nodejs:18/minimal microdnf clean all
方案2:临时关闭Node层FIPS校验(适用于无强制FIPS要求的集群)
若集群本身未强制开启FIPS,可通过Node环境变量关闭FIPS校验,在构建和运行阶段都添加如下环境变量:
# Dockerfile内配置 ENV NODE_OPTIONS="--no-fips" # 构建命令执行前会自动加载该参数 RUN npm ci && npm run build
注意:如果OpenShift节点本身在内核层面开启了FIPS,该方案无效,必须使用方案1调整算法配置。
内容的提问来源于stack exchange,提问作者Mahesh Ramachandrappa
相关产品推荐
相关产品推荐

