一种选择是经由使用node-gpg预共享GPG密钥,加密和解密发送的正常套接字连接(net.createServer
和net.connect
)的所有消息。这要求您在客户端和服务器上的$PATH
中有gpg
,服务器上有一个无密码的私人gpg密钥'Server'
,客户端上有相应的'Client'
,另一端安装有相应的公钥。
server.js:
var socketServer = net.createServer(function (c) {
// example of send to client
var output = JSON.stringify({"msg": "Stuff to send to client."});
encrypt(output, 'Client', function (error, cryptdata) {
c.write(cryptdata.toString());
});
// receive data sent from client
c.on('data', function (cryptdata) {
decrypt(cryptdata.toString(), 'Server', function (error, data) {
data = JSON.parse(data.toString());
// handle incoming data
});
});
});
socketServer.listen(port, function() {
});
客户端。js:
var socketClient = net.connect({"port": port}, function() {
// Send data to server
var data = JSON.stringify({"msg": "Data to server"});
encrypt(data, 'Server', function (error, cryptdata) {
socketClient.write(cryptdata.toString());
});
});
// Receive data from server
socketClient.on('data', function(cryptdata) {
decrypt(cryptdata.toString(), 'Client', function (error, data) {
data = JSON.parse(data.toString());
// handle data
});
});
这些是我在server.js和client.js中用于加密/解密的函数。
function encrypt(str, receiver, callback) {
gpg.encrypt(str, ['-r ' + receiver, '-a'], callback);
}
function decrypt(str, receiver, callback) {
gpg.decrypt(str, ['-u ' + receiver, '-a'], callback);
}
这消除了您可以使用自签名SSL证书碰上,并至少与我的基准,它是快了很多任何问题。虽然它可能不是安全的。
文档链接相当陈旧。以下是更新后的链接:http://nodejs.org/api/tls.html – Brad
如何在使用TLS/SSL时验证其他服务器而不购买SSL证书? – Dodekeract
看起来它可以拒绝deault自签名的证书,但是你可以重写此行为,像这样: process.env.NODE_TLS_REJECT_UNAUTHORIZED =“0” 似乎有很多这样的事情的讨论互联网。 –