npm安装报错UNABLE_TO_GET_ISSUER_CERT_LOCALLY是否为公司防火墙/政策问题的咨询
嗨,我来帮你梳理这个问题~
这个报错大概率是公司防火墙/网络政策导致的,原因是这样的:
你的公司防火墙很可能开启了SSL流量拦截(也就是常说的“中间人”拦截),它会替换掉目标服务器的SSL证书,用公司自己的根证书重新签名。浏览器能正常访问https://registry.npmjs.org/,是因为你的系统或浏览器已经预先导入并信任了公司的根证书,但npm(底层依赖Node.js的证书验证机制)默认只信任官方的根证书列表,没有包含公司的根证书,所以在puppeteer安装时下载Chrome的过程中,无法验证被防火墙替换后的证书,就抛出了UNABLE_TO_GET_ISSUER_CERT_LOCALLY错误。
给你几个可行的解决方向:
配置npm信任公司根证书(推荐,安全合规)
找到公司IT提供的根证书文件(通常是.crt或.pem格式),然后执行以下命令配置npm使用这个证书:npm config set cafile "C:/路径/到/公司根证书.crt"配置完成后再尝试执行
npm install -g puppeteer,应该就能正常验证证书并下载了。临时关闭npm的严格SSL验证(仅在可信环境下使用,有安全风险)
如果暂时拿不到公司根证书,可以临时关闭npm的严格SSL检查:npm config set strict-ssl false完成安装后建议再改回
true,避免后续安装其他包时的安全隐患。跳过Chrome下载(绕开当前问题,但不解决根本证书问题)
按照错误提示的建议,设置环境变量跳过Chrome的自动下载:# Windows命令行下设置临时环境变量 set PUPPETEER_SKIP_DOWNLOAD=true # 然后执行安装 npm install -g puppeteer这种方式只是绕开了当前的下载报错,后续npm安装其他依赖时可能还会遇到相同的证书问题,所以只能作为临时方案。
总结一下:你的问题确实和公司防火墙的SSL拦截政策直接相关,只要让npm信任公司的根证书,就能解决这个问题啦。
备注:内容来源于stack exchange,提问作者Arthur Attout

