节点js,简单tls客户端/服务器

时间:2016-08-11 09:49:26

标签: javascript node.js security ssl tls1.2

我想使用TLS创建一个简单的安全客户端/服务器。我按照official doc的说明进行操作。但我不知道如何使用openssl创建自签名证书(不适用于我)。

这里代码:

server.js

const tls = require('tls');
const fs = require('fs');

const options = {
  key: fs.readFileSync('server-key.pem'),
  cert: fs.readFileSync('server-cert.pem'),

  // This is necessary only if using the client certificate authentication.
  requestCert: true,

  // This is necessary only if the client uses the self-signed certificate.
  ca: [ fs.readFileSync('client-cert.pem') ]
};

const server = tls.createServer(options, (socket) => {
  console.log('server connected',
              socket.authorized ? 'authorized' : 'unauthorized');
  socket.write('welcome!\n');
  socket.setEncoding('utf8');
  socket.pipe(socket);
});
server.listen(8000, () => {
  console.log('server bound');
});

client.js:

const tls = require('tls');
const fs = require('fs');

const options = {
  // Necessary only if using the client certificate authentication
  key: fs.readFileSync('client-key.pem'),
  cert: fs.readFileSync('client-cert.pem'),

  // Necessary only if the server uses the self-signed certificate
  ca: [ fs.readFileSync('server-cert.pem') ]
};

const socket = tls.connect(8000, options, () => {
  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();
});

我不知道为什么要使用两个不同的密钥对:

  • 客户key.pem
  • 客户cert.pem

和:

  • 服务器key.pem
  • 服务器cert.pem

任何人都可以惹恼我?对于自签名的工作。

此致

Yoratheon

1 个答案:

答案 0 :(得分:2)

我解决了我的问题。

解决方案here