SSL错误:dotCloud上的CERT_UNTRUSTED

时间:2014-01-02 23:13:12

标签: node.js ssl npm dotcloud

在dotCloud上部署Node.js服务时,我看到以下错误:

23:03:59.958870: [www] npm ERR! Error: SSL Error: CERT_UNTRUSTED
23:03:59.959405: [www] npm ERR!     at ClientRequest.<anonymous> (/opt/node/v0.8.3/lib/node_modules/npm/node_modules/request/main.js:440:26)
23:03:59.959736: [www] npm ERR!     at ClientRequest.g (events.js:185:14)
23:03:59.960068: [www] npm ERR!     at ClientRequest.EventEmitter.emit (events.js:88:17)
23:03:59.960399: [www] npm ERR!     at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1445:7)
23:03:59.968852: [www] npm ERR!     at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
23:03:59.969361: [www] npm ERR!     at CleartextStream.socketOnData [as ondata] (http.js:1356:20)
23:03:59.969696: [www] npm ERR!     at CleartextStream.CryptoStream._push (tls.js:396:27)
23:03:59.970028: [www] npm ERR!     at SecurePair.cycle (tls.js:750:20)
23:03:59.970359: [www] npm ERR!     at EncryptedStream.CryptoStream.write (tls.js:131:13)
23:03:59.970694: [www] npm ERR!     at Socket.ondata (stream.js:38:26)
23:03:59.971012: [www] npm ERR! If you need help, you may report this log at:
23:03:59.971299: [www] npm ERR!     <http://github.com/isaacs/npm/issues>
23:03:59.971587: [www] npm ERR! or email it to:
23:03:59.971876: [www] npm ERR!     <npm-@googlegroups.com>
23:03:59.972208: [www]
23:03:59.972543: [www] npm ERR! System Linux 2.6.38.2-grsec-dotcloud-ec2
23:03:59.972852: [www] npm ERR! command "node" "/opt/node/default/bin/npm" "install"
23:03:59.973251: [www] npm ERR! cwd /home/dotcloud/rsync-1388703750593/app
23:03:59.973584: [www] npm ERR! node -v v0.8.3
23:03:59.973914: [www] npm ERR! npm -v 1.1.44
23:04:00.331100: [www] npm ERR!
23:04:00.331630: [www] npm ERR! Additional logging details can be found in:
23:04:00.331955: [www] npm ERR!     /home/dotcloud/rsync-1388703750593/app/npm-debug.log
23:04:00.332280: [www] npm ERR! not ok code 0
23:04:01.058860: [www] -- Build failed: "npm install" failed with return code 1

3 个答案:

答案 0 :(得分:10)

更新您的节点/ npm(首选),或运行npm config set ca null

他们最近在npmjs.org更改了证书,因为旧的证书已过期,但是你的npm已将旧版本硬编码到其中。

PS:将strict-ssl设置为false是一个非常糟糕的主意,除非你知道你在做什么。

答案 1 :(得分:4)

我发现以下SO question似乎表明某些npm软件包可能正在使用自签名证书,从而导致错误。似乎根修复应该与包本身一起使用注册证书。但是,作为dotCloud的解决方法,您可以使用前build hook运行以下命令npm config set strict-ssl false,这似乎在我的测试中有效。

要使用此方法,您需要执行以下操作:

1)在你的dotcloud.yml文件中添加一个prebuild指令。您的dotcloud yml文件可能如下所示:

www:
    type: nodejs
    approot: app
    processes:
        app: node app.js
    config:
        node_version: v0.8.x
    prebuild: ./prebuild.sh     # <-- prebuild directive
redis:
    type: redis

2)将prebuild.sh文件添加到应用程序根目录。如果您不使用应用程序根目录,则这只是项目的根目录。

3)将以下内容添加到prebuild.sh文件

#!/bin/bash
npm config set strict-ssl false

答案 2 :(得分:2)

根据npm blog,首选解决方案是重新安装npm,如下所示:

#!/bin/bash
set -e
npm install npm@">1.4.0" -g --ca=null

这也适用于dotCloud平台。您可以将该代码段用作prebuild.sh script,然后其他软件包应安装正常。 @">1.4.0"语法只是在安装了足够新的版本后才会这样做,您不会不必要地进行更新。如果您想要更新的东西,请随时更改它。如果您始终需要最新版本的npm,请随时删除@">1.4.0"