клиент Restify JSON возвращает ошибку DEPTH_ZERO_SELF_SIGNED_CERT

У меня есть сервер, работающий на героку с надстройкой SSL героку. Сервер создается с такими параметрами:

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

И я запускаю сервер следующим образом:

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

И это прекрасно работает, я могу вызвать свой API, например: https://myapp.herokuapp.com/some-path. SSL-сертификат на героку является самоподписанным, поэтому в веб-браузере появляется большое предупреждение, но я могу нажать «Продолжить», и он работает.

Когда я хочу вызвать свой сервер с помощью клиента JSON, созданного следующим образом:

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

а затем вызовите какой-нибудь API, подобный этому client.get('/some-path',...), тогда клиент вернет ошибку:

DEPTH_ZERO_SELF_SIGNED_CERT

Я попытался установить параметр rejectUnauthorized как на сервере, так и на клиенте (как параметр конструктора), но это не помогло...


person user606521    schedule 08.09.2013    source источник


Ответы (2)


Я только что проверил на своем собственном 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.

person Ivan Krechetov    schedule 08.01.2014
comment
Странный. ХОРОШО. Спасибо, что поделился! - person Ivan Krechetov; 08.01.2014

Для меня rejectUnauthorized не сработало. Наконец я закончил с:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

И это работает...

person user606521    schedule 08.01.2014