解析JSON客户端返回DEPTH_ZERO_SELF_SIGNED_CERT错误

时间:2013-09-08 14:47:11

标签: node.js ssl heroku restify

我使用heroku SSL插件在heroku上运行服务器。 使用以下选项创建服务器:

name: 'ServerName',
version: '1.0.0',

我运行这样的服务器:

    server.listen(process.env.PORT || 5000)

它工作正常,我可以打电话给我的api例如:https://myapp.herokuapp.com/some-path。 heroku上的SSL证书是自签名的,所以在webbrowser中有一个很大的警告但是我可以点击继续并且它可以工作。

当我想使用restify JSON客户端调用我的服务器时,创建如下:

var client   = restify.createJsonClient({
    url: 'https://myapp.herokuapp.com'
});

然后调用一些这样的api client.get('/some-path',...)然后客户端返回错误:

DEPTH_ZERO_SELF_SIGNED_CERT

我尝试在服务器和客户端上设置选项rejectUnauthorized(作为构造函数选项),但它没有帮助......

2 个答案:

答案 0 :(得分:4)

我刚刚使用自签名证书在我自己的HTTPS服务器上进行了测试。客户端的rejectUnauthorized肯定应该为你解决

var restify = require('restify'),

    client = restify.createJsonClient({
        url: 'https://127.0.0.1/booking',
        rejectUnauthorized: false
    }),

    assert = require('assert');

describe('/booking/ component\'s JSON-HAL HTTP API description', function () {
    it('responds with status 200', function (done) {
        client.get('/', function (error, request, response) {
            assert(!error);
            assert.strictEqual(response.statusCode, 200);
            done();
        });
    });
});

我删除rejectUnauthorized选项后,测试会因DEPTH_ZERO_SELF_SIGNED_CERT而失败。

答案 1 :(得分:3)

对我来说rejectUnauthorized没有用。 最后我最终得到了:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

它有效......