使用SSL over TCP通过NodeJSbuild立两个服务器之间的安全连接

我试图从一个服务器发送一个包到另一个,但我需要确保发件人是“真正的”,包不能被拦截,我怎么能做到这一点使用SSL与NodeJS或其他方式。

这就是我所做的:

服务器代码:

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:openssl\ssl\s23_clnt.c:769: 

为了确保发送者(客户端)是“真实”的,你可以尝试使用TLS客户端authentication(或相互authentication)。 这意味着您需要客户端证书(和密钥),服务器证书(和密钥),颁发/签署服务器证书的CA证书以及颁发/签署客户端证书的CA证书。

首先,您的TLS服务器将需要向任何连接的TLS客户端提供其证书; 这意味着您需要configuration其证书和密钥 。 作为握手的一部分,您还需要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 () { 

然后,为客户端configuration证书和密钥 ,以及颁发/签署服务器证书的CA证书(以便客户端可以validation接收者是“真实”的):

 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 () { 

希望这可以帮助!