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/