一種選擇是經由使用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」 似乎有很多這樣的事情的討論互聯網。 –