1

我在 Node.js 中创建了一个 TLS 服务器和一个适当的 TLS 客户端。显然他们都互相合作,但我想验证一下。

基本上,我会想到诸如检查连接,或手动连接到服务器并检查它发送的内容,或类似的东西......

服务器的相关代码为:

var tlsOptions = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('server.pem')
};

tls.createServer(tlsOptions, function (tlsConnection) {
  var d = dnode({
    // [...]
  });
  tlsConnection.pipe(d).pipe(tlsConnection);
}).listen(3000);

适当的客户端代码是:

var d = dnode();
d.on('remote', function (remote) {
    // [...]
});

var tlsConnection = tls.connect({
    host: '192.168.178.31',
    port: 3000
});
tlsConnection.pipe(d).pipe(tlsConnection);

我怎么能那样做?

4

2 回答 2

3

Wireshark 会告诉您数据是否经过 TLS 加密,但它不会告诉您连接是否真的可以抵御中间人攻击。为此,您需要测试您的客户端是否拒绝连接到提供未经受信任的 CA 签名的证书、仅对不同主机名有效的证书、不再有效的证书、已撤销的证书...

如果您的 server.pem 不是来自真实/受信任 CA 的证书,并且您的客户端没有拒绝连接到服务器(并且您没有明确向客户端提供 server.pem),那么您的客户端很可能不安全。鉴于您要连接到 IP,而不是主机名,任何受信任的 CA 都不应该为其颁发证书,所以我假设您使用的是自签名证书并且容易受到攻击。您可能需要指定rejectUnauthorizedwhen connect()ing。(咆哮:由于这是一个很常见的错误,我认为默认不验证是非常不负责任的。)

于 2012-12-31T12:22:44.133 回答
0

基本上,我会想到诸如检查连接,或手动连接到服务器并检查它发送的内容,或类似的东西......

您可以使用Wireshark等工具来查看它们正在传输的数据。

于 2012-12-29T20:10:17.380 回答