невозможно проверить первый сертификат в nodejs с loopbackjs - PullRequest
0 голосов
/ 31 декабря 2018

В следующем коде я пытался проверить, что UUID уже сгенерировано или нет.Я попытался использовать https.request вместо https.get, чтобы проверить, может быть, ошибка устранена, но результат был тем же.Кроме того, я добавляю key и crt в https.request, который используется в loopback SSL config для решения проблемы, но никаких различий не обнаружено.

const options = {
   hostname: 'app.mydomain.com', //same as localhost:3000
   port: 443,
   path: '/api/uuids?filter[where][uuid]=' + UUID,
   method: 'GET',

   key: fs.readFileSync(path.join(__dirname, './../../server/ssl/domain.key')),
   cert: fs.readFileSync(path.join(__dirname, './../../server/ssl/domain.crt'))
 };
 console.log(options);
 const req = https.request(options, (res) => {

 res.on('data', (d) => {
d = JSON.parse(d)
            console.log(d);
            if (d.length == 1 && d[0].uuid == UID) {

                return 200;
            }
            else {
                return 500;
            }
   });
 });

 req.on('error', (e) => {
   console.error(e);
 });

Ошибка консоли:

(node:4452) [DEP0079] DeprecationWarning: Custom inspection function on Objects via .inspect() is deprecated
{ Error: unable to verify the first certificate
    at TLSSocket.onConnectSecure (_tls_wrap.js:1049:34)
    at TLSSocket.emit (events.js:182:13)
    at TLSSocket._finishInit (_tls_wrap.js:631:8) code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }

Я также пытался использовать:

    const https = require('https').globalAgent.options.ca = require('ssl-root-cas/latest').create();

In the declaration of `https` but the following error appears:

(node:4500) [DEP0079] DeprecationWarning: Custom inspection function on Objects via .inspect() is deprecated
Unhandled error for request POST /registrations: TypeError: https.request is not a function
    at checkUUID (C:\apps\app\common\models\registration.js:60:20)
    at C:\apps\app\common\models\registration.js:16:17
    at notifySingleObserver (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:160:22)
    at C:\apps\app\node_modules\async\dist\async.js:3110:16
    at replenish (C:\apps\app\node_modules\async\dist\async.js:1011:17)
    at C:\apps\app\node_modules\async\dist\async.js:1016:9
    at eachLimit$1 (C:\apps\app\node_modules\async\dist\async.js:3196:24)
    at Object.<anonymous> (C:\apps\app\node_modules\async\dist\async.js:1046:16)
    at doNotify (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:157:11)
    at doNotify (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
    at doNotify (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
    at doNotify (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
    at Function.ObserverMixin._notifyBaseObservers (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:178:5)
    at Function.ObserverMixin.notifyObserversOf (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:153:8)
    at Function.ObserverMixin._notifyBaseObservers (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:176:15)
    at Function.ObserverMixin.notifyObserversOf (C:\apps\app\node_modules\loopback-datasource-juggler\lib\observer.js:153:8)

дополнительная информация

  • Я использую свой персональный сервер в качестве vps / выделенного сервера
  • Я использую Nginx с прокси-сервером для app.mydomain.com mydomain.com + wwww.mydomain.com + app.mydomain.com. Все они доступны только ssl и port 443.
  • Я использовал zerossl для получения сертификатов для моего домена и подписчиков.
  • Я использовал те же key и cert, которые сайт генерировал для
    loopbackjs ssl config

1 Ответ

0 голосов
/ 01 января 2019

через 2 дня я нахожу как решить, я использовал этот код:

var rootCas = require('ssl-root-cas/latest').create();
rootCas.addFile(__dirname +  './../../server/ssl/domain.crt');
const https = require('https');//.globalAgent.options.ca = require('ssl-root-cas/latest').create();
var request = require('request');

и

 const options = {
   hostname: 'app.mydomain.com',
   port: 443,
   path: '/api/uuids?filter[where][uuid]=' + UID,
   method: 'GET',
   key: fs.readFileSync(path.join(__dirname, './../../server/ssl/domain.key')),
   cert: fs.readFileSync(path.join(__dirname, './../../server/ssl/domain.crt'))
 };
 const req = https.get(options, (res) => {
    res.on('data', (d) => {
    d = JSON.parse(d)
    if (d.length == 1 && d[0].uuid == UID) {

        return 200;
    }
    else {
        return 500;
    }
});
 });

 req.on('error', (e) => {
   console.error(e);
 });
...