2016-07-11 8 views
1

あるサーバから別のサーバにパッケージを送信しようとしていますが、送信側が「本当の」ものでパッケージを傍受できないようにする必要があります。 NodeJSや他の方法でSSLを使用してこれを行うにはどうしたらいいですか?SSL over TCPを使用してNodeJSを使用して2台のサーバ間を安全に接続する

これは私がやったことです:

Serverコード:

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: 
+0

はい、正しく実装されたSSLでこれを行うことができます。これは、ハンドシェイク後にピアIDをチェックすることを意味し、ファッジはありません。 – EJP

答えて

1

を確保するために送信者(クライアント)が「本当の」ものであれば、TLSクライアント認証(または相互認証)を試すことができます。つまり、クライアント証明書(およびキー)、サーバー証明書(およびキー)、サーバー証明書を発行/署名したCA証明書、およびクライアント証明書を発行/署名したCA証明書が必要です。

まず、TLSサーバーは接続するTLSクライアントに証明書を提供する必要があります。これはあなたがconfigure its certificate and keyする必要があることを意味します。また、クライアントがハンドシェイクの一部として、サーバーに証明書を送信することを要求する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() { 

そして、クライアント、あなたconfigure it with its certificate and key、および署名/発行した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() { 

これは役に立ちます。

+0

JSONをtls経由で送信するにはどうすればいいですか? –

+0

@kristianzivkovicこれらのソケットでJSONを送受信するには、['node-json-socket'](https://github.com/sebastianseilund/node-json-socket)のようなものを使用します。これはTCP層を処理しますペイロードのバッファリング/解析。あなたのソケットが 'net'ではなく' tls'を使って作られたという事実は 'node-json-socket'とは関係ありません。 – Castaglia

関連する問題