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

在启用FIPS的RHEL8服务器上禁用NodeJS级FIPS的方法咨询

解决系统FIPS启用时Node.js级FIPS禁用问题

在启用系统级FIPS的RHEL 8.10服务器上,执行CI=false npm run build构建Node.js应用时出现以下报错:

Error: error:060800C8:digital envelope routines:EVP_DigestInit_ex:disabled for FIPS
at new Hash (node:internal/crypto/hash:69:19)
at createHash (node:crypto:136:10)

同款应用在另一台相同系统版本(RHEL 8.10)、相同OpenSSL版本(1.1.1k FIPS)的服务器上可正常构建,核心差异为:

  • 报错服务器:Node.js v18.20.4,node -p 'crypto.getFips()'返回1(Node级FIPS启用)
  • 正常服务器:Node.js v18.20.3,node -p 'crypto.getFips()'返回0(Node级FIPS未启用)

需求:保持系统级FIPS启用的前提下,禁用Node.js级FIPS;无法修改系统FIPS配置,仅能控制Node.js安装。尝试node -p 'crypto.setFips(0)'时触发报错:

Error [ERR_CRYPTO_FIPS_SYSTEM_CONTROLLED]: Cannot set FIPS mode. FIPS should be enabled/disabled at system level.

可行解决方案

方案1:降级Node.js到v18.20.3

Node.js v18.20.3在系统FIPS启用的环境下不会自动启用Node级FIPS,与正常构建服务器保持一致版本即可直接解决问题:

  • 使用nvm安装:
    nvm install 18.20.3
    nvm use 18.20.3
    
  • 手动安装二进制包:下载对应版本的二进制包解压后,将其bin目录添加到系统PATH中,或使用官方RPM包安装。

方案2:通过环境变量强制禁用Node级FIPS

在执行构建命令前设置NODE_FIPS=0环境变量,覆盖Node.js对系统FIPS的检测逻辑:

NODE_FIPS=0 CI=false npm run build

也可以在当前shell会话中预先设置环境变量,后续所有Node.js相关命令均生效:

export NODE_FIPS=0
CI=false npm run build

方案3:编译Node.js时禁用FIPS支持(适用于必须使用v18.20.4的场景)

手动编译Node.js v18.20.4并关闭FIPS选项:

  1. 下载源码包:
    wget https://nodejs.org/dist/v18.20.4/node-v18.20.4.tar.gz
    
  2. 解压并进入目录:
    tar -xzf node-v18.20.4.tar.gz
    cd node-v18.20.4
    
  3. 配置编译选项(禁用FIPS):
    ./configure --without-fips
    
  4. 编译并安装:
    make -j$(nproc)
    sudo make install
    

编译完成后,执行node -p 'crypto.getFips()'应返回0,此时构建应用不会触发FIPS相关错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:46:15