SSL использует самозаверяющий сертификат для внутреннего клиента / сервера на основе nodejs?

Мы пытаемся заставить два внутренних сервера общаться друг с другом через SSL, используя самозаверяющий сертификат, используя внутренне созданный ЦС, но сталкиваемся с проблемами.

Я использую следующий код и получаю ошибку "Ошибка: самозаверяющий сертификат" и задаюсь вопросом, есть ли у вас какие-либо идеи? Я использую nodejs v8.9.1 на MacOS 10.13.3.

// intended to let nodejs know about our dev CA
const syswidecas = require('syswide-cas');
const request = require('request-promise');

const fs = require('fs');

syswidecas.addCAs('/Users/myuser/.ssl/ca/myca.cer');

request({
    uri: 'https://192.168.2.100:5008/api/',
    cert: fs.readFileSync('/Users/myuser/.ssl/client.cer', 'utf8'),
    key: fs.readFileSync('/Users/myuser/.ssl/client.key', 'utf8'),
    method: 'get',
    resolveWithFullResponse: true
})
.then((response) => {
    console.log(response);
})
.catch(error => {
    console.error(error);
});

Сервер использует экспресс 4 и был инициирован с NODE_EXTRA_CA_CERTS и имеет следующий код для части ssl:

const app = express();
const port = 3001;
const sslOptions = {
  key: fs.readFileSync('/path/to/key', 'utf8'),
  cert: fs.readFileSync('/path/to/cert' 'utf8')
};
// not sure if this is need for server? Using custom env variable
syswidecas.addCAs(process.env.NODE_CERTS_DIR); 
https.createServer(sslOptions, app).listen(port);

Ошибка имеет вид:

{ RequestError: Error: self signed certificate
    at new RequestError (/Users/myuser/development/project/node_modules/request-promise-core/lib/errors.js:14:15)
    at Request.plumbing.callback (/Users/myuser/development/project/node_modules/request-promise-core/lib/plumbing.js:87:29)
    at Request.RP$callback [as _callback] (/Users/myuser/development/project/node_modules/request-promise-core/lib/plumbing.js:46:31)
    at self.callback (/Users/myuser/development/project/node_modules/request/request.js:186:22)
    at emitOne (events.js:116:13)
    at Request.emit (events.js:211:7)
    at Request.onRequestError (/Users/myuser/development/project/node_modules/request/request.js:878:8)
    at emitOne (events.js:116:13)
    at ClientRequest.emit (events.js:211:7)
    at TLSSocket.socketErrorListener (_http_client.js:387:9)
    at emitOne (events.js:116:13)
    at TLSSocket.emit (events.js:211:7)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  name: 'RequestError',
  message: 'Error: self signed certificate',
  cause: { Error: self signed certificate
    at TLSSocket.<anonymous> (_tls_wrap.js:1103:38)
    at emitNone (events.js:106:13)
    at TLSSocket.emit (events.js:208:7)
    at TLSSocket._finishInit (_tls_wrap.js:637:8)
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:467:38) code: 'DEPTH_ZERO_SELF_SIGNED_CERT' },
  error: { Error: self signed certificate
    at TLSSocket.<anonymous> (_tls_wrap.js:1103:38)
    at emitNone (events.js:106:13)
    at TLSSocket.emit (events.js:208:7)
    at TLSSocket._finishInit (_tls_wrap.js:637:8)
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:467:38) code: 'DEPTH_ZERO_SELF_SIGNED_CERT' },
  options: 
   { uri: 'https://192.168.2.100:5008/api/',
     method: 'GET',
     resolveWithFullResponse: true,
     callback: [Function: RP$callback],
     transform: undefined,
     simple: true,
     transform2xxOnly: false },
  response: undefined }

Я использовал шаги здесь, чтобы сгенерировать все ключи и сертификаты: https://www.makethenmakeinstall.com/2014/05/ssl-client-authentication-step-by-step/

0 ответов

Другие вопросы по тегам