node.js - 如何验证连接实际上是否受 TLS 保护?

标签 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);

我该怎么做?

最佳答案

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

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

关于node.js - 如何验证连接实际上是否受 TLS 保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085444/

相关文章:

ruby-on-rails - CloudFlare SSL + Heroku 自定义域不起作用

ssl - Twitter/Microsoft/Yahoo OAuths 是否需要 SSL?

wordpress - 将 Wordpress 站点移动到 HTTPS

java - 'javax.xml.ws.Endpoint' 和 2 种 SSL 方式

javascript - 表示没有设置Cookie

jquery - 在 Jade 和 Bootstrap 中使用 Dropdowns 给我 $ (".dropdown-toggle")。dropdown 不是函数

node.js - Dokku找不到 'webpack'

javascript - 在将参数传递到 Jade 文件时,我可以(如何)使用 Jade 速记吗?

javascript 仅显示 for 循环的最后一次迭代的输出,其中包含 Promise 对象

c++ - boost asio SSL 服务器错误 : called a function you should not call