使用 SSL over TCP 通过 NodeJS 在两台服务器之间建立安全连接



>我正在尝试将包从一台服务器发送到另一台服务器,但我需要确保发送者是"真正的"发送者并且包无法被拦截,如何使用带有 NodeJS 的 SSL 或其他方式执行此操作。

这是我所做的:

服务器代码:

server = tls.createServer(function(c) {
console.log('server connected',
c.authorized ? 'authorized' : 'unauthorized');
});

客户端代码:

var tls = require('tls');
var fs = require('fs');
var options = {
key  : fs.readFileSync('server.key'),
cert : fs.readFileSync('server.crt')
};
var client = tls.connect(9838, options, function () {
console.log(client.authorized ? 'Authorized' : 'Not authorized');
});

这个错误出来了:

Error: 101057795:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv handshake failure:opensslssls23_clnt.c:769:

为了确保发送方(客户端)是"真正的"发送方,您可以尝试使用 TLS 客户端身份验证(或相互身份验证)。 这意味着您需要客户端证书(和密钥)、服务器证书(和密钥)、颁发/签名服务器证书的 CA 证书以及颁发/签署客户端证书的 CA 证书。

首先,您的TLS服务器需要向任何连接的TLS客户端提供其证书;这意味着您需要配置其证书和密钥。 您还需要 TLS 服务器请求客户端将其证书发送到服务器,作为握手的一部分:

var tlsOptions = {
  cert: fs.readFileSync('server-cert.pem'),
  key: fs.readFileSync('server-key.pem'),
  ca: [ fs.readFileSync('client-ca-cert.pem'),
  requestCert: true,
  rejectUnauthorized: true
};
var server = tls.createServer(tlsOptions, function () {

然后,对于客户端,您可以使用其证书和密钥以及颁发/签名服务器证书的 CA 证书对其进行配置(以便客户端可以验证接收方是否是"真正的"接收方):

var tlsOptions = {
  host: 'server.example.com',
  port: 9838,
  cert: fs.readFileSync('client-cert.pem'),
  key: fs.readFileSync('client-key.pem'),
  ca: [ fs.readFileSync('server-ca-cert.pem')
};
var client = tls.connect(tlsOptions, function () {

希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新