Node JS TLS服务器和客户端无法正常运行

时间:2018-11-26 22:45:16

标签: node.js ssl web tcp insecure-connection

最近,我一直在尝试制作基本的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.pemagent1-cert.pemagent2-cert.pemagent1-key.pemagent2-key.pem。那是证书。

每个 cert 文件的开头和结尾均为

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

每个 key 文件的开头和结尾都是

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

除此之外,我想知道这有多安全,因为我最初的计划是将其用作登录/数据库服务器或不易被黑客入侵的东西。

谢谢。

编辑1

有人在评论中说,由于CA文件错误,证书可能没有得到验证。我将CA文件与“ ...- cert.pem”文件放在同一位置。我以为那不是问题,因为我和我的朋友聊天,他检查了证书和密钥文件,并说它们都很好。

0 个答案:

没有答案