我在ubuntu上使用npm v1.0.104/node 0.6.12 -当我试图通过npm安装任何新模块时,我收到了下面的错误。IO之前使用http,而不是HTTPS &我想知道这是否会导致npm/unsigned certs的问题)。当npm试图解析“https://registry.npmjs.org”URL时,错误就会弹出。有没有办法我可以忽略错误,或者找到/添加证书到可信存储,以便继续使用npm。

任何关于需要做什么来解决问题的见解都将受到感谢(如果可能的话,我更喜欢通过配置来解决问题,而不是重新安装)。

错误:" SSL错误:SELF_SIGNED_CERT_IN_CHAIN"

完整的信息:

npm ERR! Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/main.js:252:28)
npm ERR!     at ClientRequest.emit (events.js:67:17)
npm ERR!     at HTTPParser.onIncoming (http.js:1261:11)
npm ERR!     at HTTPParser.onHeadersComplete (http.js:102:31)
npm ERR!     at CleartextStream.ondata (http.js:1150:24)
npm ERR!     at CleartextStream._push (tls.js:375:27)
npm ERR!     at SecurePair.cycle (tls.js:734:20)
npm ERR!     at EncryptedStream.write (tls.js:130:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!     at Socket.emit (events.js:67:17)
npm ERR! Report this *entire* log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
npm ERR! 
npm ERR! System Linux 2.6.38-13-generic
npm ERR! command "node" "/usr/bin/npm" "install" "jed"
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.0.104

当前回答

执行以下命令帮助解决该问题:

npm config set strict-ssl false

目前我还不能评论它是否会引起任何其他问题。

其他回答

对于那些在mac上有同样问题并通过homebrew安装npm的人:

brew uninstall npm

then

brew install npm

适用于osx (10.9.1)

编辑:你可能需要在安装npm之前酿造更新。您还可以在更新自制程序后进行brew升级。此外,如果您遇到任何其他问题,运行brew doctor可能会有所帮助。

把它放在命令之前似乎可以工作NODE_TLS_REJECT_UNAUTHORIZED=0。 NODE_TLS_REJECT_UNAUTHORIZED=0 npm…

最好弄清楚如何使节点将自签名证书视为有效的。由于某些原因,上面的严格ssl建议对我不起作用。如果您了解安全影响并需要临时快速修复,这是我在谷歌搜索错误期间在一些随机github问题中发现的。

SELF_SIGNED_CERT_IN_CHAIN错误表示证书链中有自签名证书,基本上不受系统信任。

如果发生这种情况,基本上就是有可疑的事情发生了,因此,正如人们已经评论的那样,不建议仅仅禁用证书检查,但更好的方法是了解问题所在并修复原因。

这可能与以下任何一个有关:

自定义存储库地址没有正确的证书, 具有透明代理的公司网络。 如果你使用的是企业web代理,你应该设置正确的HTTP_PROXY/HTTPS_PROXY环境变量,或者通过npm设置它们: NPM配置设置代理http://proxy.company.com:8080 NPM配置http -proxy http://proxy.company.com:8080 参见:如何在企业web代理后面设置Node.js和Npm

如果信任主机,则可以从链中导出自签名证书并将其导入系统,这样它们就被标记为受信任。

这可以通过检查证书来实现(根据npm-debug.log将example.com更改为npm repo,这是失败的):

openssl s_client -showcerts -connect example.com:443 < /dev/null

然后将证书内容(在BEGIN和END之间)保存到.crt文件中,以便导入。

Linux

根据建议,您可以在/etc/environment文件(Node 7.4+)中添加以下内容来导出您的CA链,例如:

NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCer‌​ts.pem

被久远

在CentOS 5上,可以将其添加到/etc/pki/tls/certs/ca-bundle中CRT文件,例如

ex +'g/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq | sudo tee -a /etc/pki/tls/certs/ca-bundle.crt
sudo update-ca-trust force-enable
sudo update-ca-trust extract
npm install

注意:如果只导出第一个证书,请在开始时删除g。

CentOS 6支持将证书文件拷贝到“/etc/pki/ca-trust/source/ anchor/”路径下。

Ubuntu/Debian

在Ubuntu/Debian中,拷贝CRT文件到/usr/local/share/ca-certificates/,然后运行:

sudo update-ca-certificates

操作系统

在macOS中你可以运行:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/foo.crt

窗户

Windows下:certutil -addstore -f "ROOT" new-root-certificate.crt


请参见:npm -故障排除- SSL错误

我写了一篇文章,如果你别无选择,如何在公司防火墙后禁用大多数npm问题。

要注意你可能容易受到攻击。

https://wnderlvst.com/stories/102a237a-cea1-463b-89db-82224f1c1cbe

电源外壳

yarn config set "strict-ssl" false
yarn config set "network-timeout" 600000
$env:NODE_TLS_REJECT_UNAUTHORIZED=0

执行以下命令帮助解决该问题:

npm config set strict-ssl false

目前我还不能评论它是否会引起任何其他问题。