Узел JS TLS сервер и клиент работают неправильно - PullRequest
0 голосов
/ 27 ноября 2018

Недавно я пытался создать базовый сервер и клиент TLC для установки Rasperry PI.Я нашел пример на github , и я изменил его так, чтобы он обновлялся.Моя проблема в том, что Node JS продолжает говорить unable to verify the first certificate, хотя я сгенерировал новый.

примечание сертификаты и ключи являются самозаверяющими.

Вот мой код, я не имею ни малейшего понятия о том, почему он не работает, потому чтокогда я устанавливаю ServerOptions в качестве параметров клиента, он просто регистрирует Unsecure connection.

Server.js

'use strict';

const tls = require('tls');
const fs = require('fs');
const util = require('util');
const events = require('events');
const port = 4170;

const ServerOptions = {
    key: fs.readFileSync('agent1-key.pem'),
    cert: fs.readFileSync('agent1-cert.pem'),
    ca: fs.readFileSync('root-cert.pem'), // authority chain for the clients
    requestCert: true,
    rejectUnauthorized: false
};

var server = tls.createServer(ServerOptions, (socket) => {
  socket.write('welcome!\n');
  socket.setEncoding('utf8');
  socket.pipe(socket);
})

.on('connection', function(c) {
    console.log('Unsecure connection');
})

.on('secureConnect', function (c) {
    // c.authorized will be true if the client cert presented validates with our CA
    console.log('secure connection\n client authorization Status:', c);
})

.listen(port, function() {
    console.log('server listening on port' + port + '\n');
});`

Client.js

const tls = require('tls');
const fs = require('fs');
const util = require('util');
const events = require('events');
const port = 4170;

const ClientOptions = {
  key: fs.readFileSync('agent2-key.pem'),
  cert: fs.readFileSync('agent2-cert.pem'),
  ca: fs.readFileSync('root-cert.pem')
};

const socket = tls.connect(port, ClientOptions, () => {
      console.log('client connected', socket.authorized ? 'authorized' : 'unauthorized');
      process.stdin.pipe(socket);
      process.stdin.resume();
    });
    socket.setEncoding('utf8');
    socket.on('data', (data) => {
      console.log(data);
    });
    socket.on('end', () => {
      server.close();
    });

Итак, как вы, вероятно, видели, есть ca1-cert.pem, agent1-cert.pem, agent2-cert.pem, agent1-key.pem и agent2-key.pem.Это сертификаты.

Каждый из файлов cert имеет начало и конец

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

И каждый из файлов key имеетначало и конец

-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

Кроме того, мне интересно, насколько это безопасно, потому что мой первоначальный план - использовать его в качестве сервера входа в систему / сервера базы данных или что-то, что не может быть легко взломано.

Спасибо.

Редактировать 1

В комментариях кто-то сказал, что возможно, что сертификат не проверен из-за неправильного файла CA.,Я поместил файл CA в то же место, что и файлы «...- cert.pem».Я предполагаю, что это не проблема, потому что я поговорил с моим другом, он просмотрел файлы сертификатов и ключей и сказал, что все они хороши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...