Node 16.13(OpenSSL 3.0.0)开启FIPS模式报OpenSSL错误如何解决
解决方案
你遇到的报错核心原因是OpenSSL 3.0.x的FIPS提供者需要额外的配置文件和自检段配置,Node官方BUILDING.md的默认编译指引没有覆盖OpenSSL 3.0的FIPS配置步骤,按以下流程操作即可修复:
步骤1:确认编译时已正确嵌入FIPS提供者
首先确保你编译Node的时候加了正确的编译参数,检查编译配置是否包含以下参数:
./configure --openssl-fips --shared-openssl
如果是用静态编译内置OpenSSL的方式,要确认编译过程中OpenSSL的FIPS模块已经被正确编译进Node的二进制依赖中。
步骤2:生成FIPS配置文件
你需要手动生成OpenSSL 3.0的FIPS配置文件,操作命令如下:
# 首先进入你编译Node时用到的OpenSSL 3.0.0源码的fips子目录 cd openssl-3.0.0/providers/fips # 生成fipsmodule.cnf配置文件 openssl fipsinstall -out /path/to/your/fipsmodule.cnf -module ./fips.so # 注意Windows平台模块路径替换为fips.dll,macOS替换为fips.dylib
步骤3:配置全局OpenSSL配置文件
创建或者修改你的openssl.cnf文件,添加以下内容:
config_diagnostics = 1 openssl_conf = openssl_init [openssl_init] providers = provider_sect [provider_sect] fips = fips_sect base = base_sect [base_sect] activate = 1 [fips_sect] activate = 1 fips-module-config = fips_config [fips_config] install-version = 1 module-name = fips install-mac = 【这里替换成你执行fipsinstall命令时输出的HMAC校验值】 module-path = /path/to/your/fips.so
步骤4:指定配置文件路径启动Node
启动Node的时候通过环境变量指定OpenSSL配置文件路径:
OPENSSL_CONF=/path/to/your/openssl.cnf node --enable-fips -p 'crypto.getFips()'
正常情况下会输出1,代表FIPS模式已经成功启用。
额外注意事项
- Node 16.13内置的OpenSSL 3.0.0存在多个FIPS相关的已知bug,如果配置完还是报错,建议升级到Node 16.20+版本,该版本更新了内置OpenSSL的小版本,修复了FIPS自检的多个问题
- 生产环境使用FIPS模式需要确保你使用的OpenSSL FIPS模块已经通过了对应平台的FIPS 140-2/140-3认证,避免合规风险
内容的提问来源于stack exchange,提问作者markobugbg
相关产品推荐
相关产品推荐

