如何验证连接实际上是否受到TLS保护?

时间:2012-12-29 20:05:00

标签: node.js ssl

我在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);

我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

  

基本上,我想到的一些事情,比如检查连接,或者手动连接到服务器并检查它发送的内容,或类似的东西......

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