我正在尝试在Ubuntu中安装Phonegap。 NodeJS的安装很成功,但我无法安装Phonegap本身。这是终端的错误输出:
test@test-VirtualBox:~$ sudo npm install -g phonegap
npm http GET https://registry.npmjs.org/phonegap
npm http GET https://registry.npmjs.org/phonegap
npm http GET https://registry.npmjs.org/phonegap
npm ERR! Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE
npm ERR! at SecurePair.<anonymous> (tls.js:1350:32)
npm ERR! at SecurePair.EventEmitter.emit (events.js:92:17)
npm ERR! at SecurePair.maybeInitFinished (tls.js:963:10)
npm ERR! at CleartextStream.read [as _read] (tls.js:463:15)
npm ERR! at CleartextStream.Readable.read (_stream_readable.js:320:10)
npm ERR! at EncryptedStream.write [as _write] (tls.js:366:25)
npm ERR! at doWrite (_stream_writable.js:219:10)
npm ERR! at writeOrBuffer (_stream_writable.js:209:5)
npm ERR! at EncryptedStream.Writable.write (_stream_writable.js:180:11)
npm ERR! at write (_stream_readable.js:573:24)
npm ERR! If you need help, you may report this log at:
npm ERR! <http://bugs.debian.org/npm>
npm ERR! or use
npm ERR! reportbug --attach /home/test/npm-debug.log npm
npm ERR! System Linux 3.11.0-14-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" "-g" "phonegap"
npm ERR! cwd /home/test
npm ERR! node -v v0.10.15
npm ERR! npm -v 1.2.18
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /home/test/npm-debug.log
npm ERR! not ok code 0
任何帮助都将不胜感激。
答案 0 :(得分:104)
我得到了同样的错误,因为我是公司防火墙/代理的后面,我的连接通过了代理的证书。
在命令行中运行:
npm config set strict-ssl false
注意:盲目接受不受信任或无效的SSL证书不是最佳做法,这是该命令的作用(关闭证书检查)。你可以运行
npm config set strict-ssl true
将其重新打开。
答案 1 :(得分:19)
这可以在不禁用严格SSL的情况下修复,但这并非易事。
查找实际使用的证书,可能是您behind a corporate SSL intercepting proxy。您可能可以使用浏览器,某些CLI工具等。我最终在Windows中运行certmgr.msc
,因为证书通过组策略分发并导出为p7b文件。
转换证书,我使用openssl工具将p7b转换为PEM(又名.crt)
openssl pkcs7 -print_certs -inform DER -in /mnt/adam/certs/my-company-root.p7b -outform PEM -out my-company-root.crt
如果有多个证书,合并到一个PEM文件taking care to order from leaf to root.
cat my-company-leaf.crt my-company-intermediate.crt my-company-root.crt > my-company-single.crt
在证书文件中配置 npm
npm config set cafile my-company-single.crt
(或全球)
sudo npm config set -g cafile my-company-single.crt
答案 2 :(得分:4)
运行
npm config set strict-ssl false
解决了我的问题。
我正在使用Vagrant(Linux exact32 Ubuntu)和Windows 7作为主机。
谢谢
答案 3 :(得分:2)
如果有人像我一样笨拙,当我忘记在项目的网址之前添加UNABLE_TO_VERIFY_LEAF_SIGNATURE
时,我在npm install
上得到了git+
。
我有
npm install --save https://myserv.er/my/project-path.git
代替
npm install --save git+https://myserv.er/my/project-path.git
答案 4 :(得分:0)
您还可以使用节点环境变量在代码中禁用SSL检查:
在index.js文件中,添加:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
请注意,这不是好习惯,因为它不会尝试检查https证书的有效性
答案 5 :(得分:0)
确保 root 具有配置属性。
使用 sudo 时,您在为 root 配置的环境下运行。 Root 可能没有相同的节点配置,并且可能不知道您的证书。尝试使用 -E 将您的环境配置传递给 root:
$ sudo -E npm install -g phonegap