gpt4 book ai didi

npm - 在 Windows 上运行 Npm 时如何修复 SSL 证书错误?

转载 作者:行者123 更新时间:2023-12-03 05:16:34 26 4
gpt4 key购买 nike

当我尝试使用 npm 安装软件包时,它不起作用。经过漫长的等待,我最终收到错误消息“无法建立隧道套接字,sutatusCode=403”。

$ npm install coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm ERR! Error: tunneling socket could not be established, sutatusCode=403
npm ERR! at ClientRequest.onConnect (c:\Program Files\nodejs\node_modules\npm\node_modules\request\tunnel.js:148:19)
npm ERR! at ClientRequest.g (events.js:193:14)
npm ERR! at ClientRequest.EventEmitter.emit (events.js:123:20)
npm ERR! at Socket.socketOnData (http.js:1393:11)
npm ERR! at TCP.onread (net.js:403:27)

但是,当我在网络浏览器 (Google Chrome) 中浏览到相同的 URL 时,它可以正常加载(参见脚注)。 https://registry.npmjs.org/coffee-script

怎么了?

虽然我碰巧使用了 https 代理,但我相信这不是问题。我已经配置了环境变量 https_proxy (根据 npm user guide )。我知道环境变量是正确的,因为 Python 包管理器 pip正确地遵循它。

我相信问题与 SSL 证书有关,因为如果我使用 wget 下载该 URL , 我收到关于证书的明确错误
$ wget https://registry.npmjs.org/coffee-script
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
--2012-12-17 12:14:07-- https://registry.npmjs.org/coffee-script
Resolving corpproxy... 10.254.215.35
Connecting to corpproxy|10.254.215.35|:8080... connected.
ERROR: cannot verify registry.npmjs.org's certificate, issued by `/C=US/ST=CA/L=Oakland/O=npm/OU=npm Certificate Authority/CN=npmCA/emailAddress=i@izs.me':
Unable to locally verify the issuer's authority.
To connect to registry.npmjs.org insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

我该如何解决这个问题?在不影响安全的情况下。

我曾经在我的网络浏览器中也遇到过 SSL 证书错误,直到我在控制面板的 Internet 选项中安装了“npmCA”证书作为“受信任的根证书颁发机构”(截图 enter image description here)

编辑:我根据 https://npmjs.org/doc/config.html#strict-ssl 尝试了一个不安全的解决方法
npm set strict-ssl false

然而它仍然超时并出现相同的错误
$ npm install coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script
npm ERR! Error: tunneling socket could not be established, sutatusCode=403

最佳答案

TL;博士 - 只需运行它,不要禁用您的安全性:

替换现有证书

# Windows/MacOS/Linux 
npm config set cafile "<path to your certificate file>"

# Check the 'cafile'
npm config get cafile

扩展现有证书

设置此环境变量以扩展预定义的证书: NODE_EXTRA_CA_CERTS"<path to certificate file>"
全文

我不得不在 Windows 下的企业防火墙后面使用 npm、pip、ma​​ven 等 - 这并不有趣。我会尽量让这个平台不可知/知道。

HTTP_PROXY & HTTPS_PROXY
HTTP_PROXY & HTTPS_PROXY是许多软件使用的环境变量来了解您的代理在哪里。在 Windows 下,许多软件也使用您的操作系统指定的代理,这是完全不同的事情。这意味着您可以让 Chrome(它使用您的 Internet 选项中指定的代理)连接到 URL 就好了,但是 npm、pip、ma​​ven 等无法正常工作,因为它们使用 HTTPS_PROXY(除非它们使用 HTTP_PROXY - 见下文)。通常环境变量看起来像:
http://proxy.example.com:3128

但是你得到了一个 403这表明您没有通过代理进行身份验证。如果它是代理上的基本身份验证,您需要将环境变量设置为以下形式:
http://user:pass@proxy.example.com:3128

可怕的 NTLM

有一个 HTTP 状态代码 407(需要代理身份验证),这是更正确的说法,它是代理而不是拒绝您的请求的目标服务器。这段代码困扰了我最长的时间,直到在 Google 上花了很多时间,我才知道我的代理使用了 NTLM authentication . HTTP 基本身份验证不足以满足我的公司霸主安装的任何代理。我求助于使用 Cntlm在我的本地机器上(未经身份验证),然后让它处理与上游代理的 NTLM 身份验证。然后我不得不告诉所有不能做 NTLM 的程序使用我的本地机器作为代理——这通常就像设置 HTTP_PROXY 一样简单。和 HTTPS_PROXY .否则,对于 npm 使用(如@Agus 建议的那样):
npm config set proxy http://proxy.example.com:3128
npm config set https-proxy http://proxy.example.com:3128

“我们需要解密所有 HTTPS 流量,因为病毒”

在这种设置(笨拙地)嗡嗡作响大约一年之后,企业霸主决定更换代理。不仅如此,它还将不再使用 NTLM!一个勇敢的新世界是肯定的。但是,由于那些恶意软件编写者现在通过 HTTPS 传播恶意软件,他们保护我们这些可怜的无辜用户的唯一方法就是在威胁到达我们之前对每个连接进行中间人扫描以扫描威胁。你可以想象,我被安全感所征服。

长话短说,需要将自签名证书安装到 npm 中以避免 SELF_SIGNED_CERT_IN_CHAIN :
npm config set cafile "<path to certificate file>"

或者, NODE_EXTRA_CA_CERTS环境变量可以设置为证书文件。

我认为这就是我所知道的关于让 npm 在代理/防火墙后面工作的一切。可能有人觉得它有用。

编辑 :通过使用 HTTP 注册表或设置 NODE_TLS_REJECT_UNAUTHORIZED 来关闭 HTTPS 是一个非常普遍的建议。 .这些都不是好主意,因为您正在为进一步的中间人或重定向攻击敞开心扉。在执行软件包安装的机器上快速欺骗您的 DNS 记录,您会发现自己信任来自任何地方的软件包。使 HTTPS 工作似乎需要做很多工作,但强烈建议这样做。当您负责允许不受信任的代码进入公司时,您就会明白原因。

编辑 2 :
请记住设置 npm config set cafile <path>导致 npm 仅使用该文件中提供的证书,而不是使用它扩展现有的证书。

如果您想使用环境变量 NODE_EXTRA_CA_CERTS 扩展现有证书(例如使用公司证书)链接到文件是要走的路,可以为您省去很多麻烦。见 how-to-add-custom-certificate-authority-ca-to-nodejs

关于npm - 在 Windows 上运行 Npm 时如何修复 SSL 证书错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13913941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com