npm/yarn装Node包报ERR_SSL_DECRYPTION_FAILED_OR_BAD_RECORD_MAC求解
无法通过npm或yarn安装Node.js包 排查方案
核心报错ERR_SSL_DECRYPTION_FAILED_OR_BAD_RECORD_MAC属于HTTPS链路传输/校验异常,和Node、npm本身版本无强关联,按以下优先级排查即可:
- 优先排查网络代理、安全类软件干扰
完全退出系统代理、VPN、企业上网管控工具、杀毒软件的HTTPS扫描/网页防护模块,这类工具普遍会做SSL中间人替换,很容易触发Node侧的SSL校验失败。
退出后执行以下命令清理npm、yarn侧残留的代理配置:
清理完成后重试安装命令。npm config delete proxy npm config delete https-proxy yarn config delete proxy yarn config delete https-proxy - 校验SSL证书信任链配置
先执行以下命令临时关闭SSL严格校验做问题定位:
关闭后如果能正常安装,说明问题出在本地证书信任链,不要长期关闭strict-ssl,定位完成后执行npm config set strict-ssl falsenpm config set strict-ssl true改回默认配置,再通过指定系统可信证书路径修复:- Windows系统执行:
npm config set cafile "C:\Windows\System32\curl-ca-bundle.crt",如果对应路径无证书文件,可从同环境正常运行的设备上拷贝根证书库文件到本地后指定路径 - Mac系统执行:
npm config set cafile "/etc/ssl/cert.pem"
- Windows系统执行:
- 排查链路MTU值异常
这是该报错非常隐蔽的高频诱因:网卡或路由器MTU设置过大时,SSL传输的大包会被分片丢弃,直接触发解密失败错误。
测试时可临时把网卡MTU值从默认1500下调到1400:- Windows系统管理员身份打开命令提示符,先执行
netsh interface ipv4 show subinterfaces查看网卡对应连接名,再执行netsh interface ipv4 set subinterface "对应网卡连接名" mtu=1400 store=persistent - Mac系统执行
sudo ifconfig en0 mtu 1400
修改完成后重试安装,如果恢复正常,可逐步上调MTU值找到链路支持的最大值,或联系网络管理员调整链路MTU配置。
- Windows系统管理员身份打开命令提示符,先执行
- 排查源地址、DNS配置异常
先执行npm config get registry查看当前使用的包源地址,如果是第三方镜像源、私有源,先切回官方源测试:
同时检查系统hosts文件是否存在和包仓库域名相关的异常映射,存在则全部删除;将本地DNS替换为公共DNS后刷新缓存再重试。npm config set registry https://registry.npmjs.org/ yarn config set registry https://registry.yarnpkg.com/
*问题复现说明:执行yarn install、npm install、npx create-react-app myapp时可稳定触发报错,切换多个Node.js、npm版本均无法解决。
内容的提问来源于stack exchange,提问作者Piyush Singhania
相关产品推荐
相关产品推荐

