在使用npm时收到错误:'错误:SSL错误:SELF_SIGNED_CERT_IN_CHAIN'
我在ubuntu上使用npm v1.0.104 / node 0.6.12 – 我试图通过npm安装任何新模块时收到下面的错误(我之前使用httptesting过socket.io,不是https,但是想知道是否可以导致与npm /未签名的证书的问题)。 一旦npm尝试parsing“https://registry.npmjs.org”url,就会popup错误消息。 有无论如何,我可以忽略错误,或者可能find/添加证书到可靠的商店,以继续使用npm。
任何需要做什么来解决这个问题的洞察力将不胜感激(我宁愿通过configuration解决问题,而不是如果可能重新安装)。
错误:“错误: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
我不能评论此时是否会引起其他问题。 希望它有帮助。
截至2014年2月27日, npm不再支持其自签名证书 。 按照npm的build议,以下选项是执行以下操作之一:
升级你的npm版本
npm install npm -g --ca=""
– 要么 –
告诉你当前版本的npm使用已知的注册商
npm config set ca ""
更新: npm发布了更多与SELF_SIGNED_CERT_IN_CHAIN和npm有关的更多帮助,针对不同的环境
您可能需要也可能不需要在build议中添加sudo
。
其他选项
看来人们用npm的build议有问题,所以这里有一些其他的潜在的解决scheme。
升级节点本身
接收到这个错误可能意味着你有一个旧版本的节点,它自然会附带一个老版本的npm。 一种解决scheme是升级您的节点版本。 这可能是最好的select,因为它为您带来了最新的并修复了现有的错误和漏洞。
这里的过程取决于你如何安装Node,你的操作系统,否则。
更新npm
因为你在试图install
一个软件包的时候很可能到了这里,所以npm install npm -g
可能会失败并且出现相同的错误。 如果是这种情况,请使用update
。 正如Nisanth Sojan所build议的那样:
npm update npm -g
更新npm的替代
解决问题的一个方法是使用已知的注册商,安装,然后停止使用已知的注册商。 正如jnylen所build议的那样:
npm config set ca "" npm install npm -g npm config delete ca
现在我只是将registryURL从https切换到http。 喜欢这个:
npm config set registry="http://registry.npmjs.org/"
你需要升级npm。
// Do this first, or the upgrade will fail npm config set ca "" npm install npm -g // Undo the previous config change npm config delete ca
您可能需要使用sudo
前缀这些命令。
资料来源: http : //blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more
npm config set strict-ssl false -g
全球保存
存储库不再支持自签名证书。 你需要升级npm
。
// Disable the certificate temporarily in order to do the upgrade npm config set ca "" // Upgrade npm. -g (global) means you need root permissions; be root // or prepend `sudo` sudo npm install npm -g // Undo the previous config change npm config delete ca // For Ubuntu/Debian-sid/Mint, node package is renamed to nodejs which // npm cannot find. Fix this: sudo ln -s /usr/bin/nodejs /usr/bin/node
您需要打开一个新的terminal会话才能使用更新的npm
。
资料来源:这本来是对jnylen答案的编辑。 尽pipe准则中提到“我们欢迎所有build设性的修改,但是请让它们成为可观的”,但是编辑被拒绝了,原因是“这个编辑在原来的post中变化太大了,原本的意义或者意图将会丢失”。 我猜社区喜欢单独的答案。
对于那些在同一个问题的Mac ,并通过自制程序安装npm的人:
brew uninstall npm
然后
brew install npm
在OSX上为我工作(10.9.1)
编辑 :您可能需要在安装npm前brew update
。 更新自制软件后,您还可以进行brew upgrade
。 如果遇到任何其他问题,运行brew doctor
可能会有所帮助。
错误SELF_SIGNED_CERT_IN_CHAIN
意味着您在证书链中拥有基本上不被系统信任的自签名证书。
如果发生这种情况,基本上有些腥意,因此正如人们已经评论的那样,不build议只禁用证书检查,但更好的方法是了解问题的症结所在,并确定原因。
这可能涉及到:
-
自定义存储库地址没有正确的证书,
-
具有透明代理的公司networking。
如果您位于公司Web代理之后,则应设置正确的
HTTP_PROXY
/HTTPS_PROXY
环境variables或通过npm
设置它们:npm config set proxy http://proxy.company.com:8080 npm config set https-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的
根据build议 ,您可以将导出的证书添加到/etc/environment
文件(节点7.4+)中,如:
NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCerts.pem
CentOS的
在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/anchors/
。
Ubuntu的/ Debian的
在Ubuntu / Debian中,将CRT文件复制到/usr/local/share/ca-certificates/
然后运行:
sudo update-ca-certificates
MACOS
在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错误
快速和干净的解决scheme(linuxtesting)(2014年2月27日之后)
卸载npm
npm rm npm -g
安装npm (新的URL是http://www.npmjs.org而不是npmjs.org )
curl https://www.npmjs.org/install.sh | sh
提示 :如何在linux下安装node.js https://stackoverflow.com/a/22099363/333061
卸载NPM并重新安装。
截至2014年2月27日,npm不再支持其自签名证书。 http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more
以上链接build议使用NPM升级NPM。 这也与SELF_SIGNED_CERT_IN_CHAIN失败…
closuresSSL似乎是一个非常糟糕的主意。 npm的博客解释说,他们不再支持他们的自签名证书。 他们build议通过npm install npm -g
升级npm,但我当然得到了相同的SELF_SIGNED_CERT_IN_CHAIN错误。 所以我刚刚更新了节点,随之更新了npm。 确切的过程取决于你如何安装节点。