配置Azure Artifacts源后npm install/publish遇SSL错误求助
解决Node.js连接Azure Artifacts时的SSL不安全重协商错误
问题根源
Node.js 18及以上版本搭载的OpenSSL 3.0默认禁用了不安全的旧版SSL重协商机制,而你的Azure Artifacts服务器仍在使用不兼容的SSL配置,导致npm请求失败。npm config set strict-ssl false仅关闭证书校验,无法解决重协商层面的兼容性问题。
可行解决方案
方案1:临时通过环境变量兼容旧版重协商
执行npm命令前,先设置Node.js启用旧版SSL提供者:
export NODE_OPTIONS="--openssl-legacy-provider" npm install # 发布时同理 export NODE_OPTIONS="--openssl-legacy-provider" npm publish
若需要长期生效,可将环境变量写入shell配置文件(如~/.zshrc或~/.bash_profile):
echo 'export NODE_OPTIONS="--openssl-legacy-provider"' >> ~/.zshrc source ~/.zshrc
方案2:修改OpenSSL全局配置
- 找到macOS下Homebrew安装的OpenSSL配置文件,路径通常为
/opt/homebrew/etc/openssl@3/openssl.cnf - 打开文件,定位到
[openssl_init]段,添加或修改:[openssl_init] ssl_conf = ssl_sect - 在文件末尾追加以下配置:
[ssl_sect] system_default = system_default_sect [system_default_sect] Options = UnsafeLegacyRenegotiation - 保存文件后重启终端,再执行npm命令。
方案3:降级Node.js版本(应急方案)
若上述方案无效,可临时降级到Node.js 16.x版本(该版本使用OpenSSL 1.1.1,默认支持旧版重协商),借助nvm快速切换:
nvm install 16 nvm use 16 npm install
注意事项
--openssl-legacy-provider会降低SSL安全等级,仅建议在信任的内部服务器(如你的Azure Artifacts)场景下使用。- 优先联系运维团队升级Azure Artifacts服务器的SSL配置,移除对旧版重协商的依赖,从根源解决问题。
内容的提问来源于stack exchange,提问作者Bhavesh
相关产品推荐
相关产品推荐

