require('https')vs require('tls')

时间:2014-06-11 11:56:36

标签: node.js security ssl express

我尝试使用Node.js,Express.js和TLS(1.2)在客户端和服务器之间创建一个非常安全的连接。

我认为我的问题在于理解TLS实际上是什么 - 意味着什么是交换,何时以及如何由谁。

无论如何,我正在寻找互联网,就像一个疯狂的人(疯狂的人)试图找出以下内容:

  • var tls = require('tls');调用什么?
  • var https = require('https');调用什么?

当使用另一个节点作为客户端时,我可以工作,但在这种情况下,客户端将是浏览器中的用户。我可以同时使用浏览器还是仅使用https?

由于

1 个答案:

答案 0 :(得分:35)

让我们确实从TLS开始。

TLS是一种在客户端和服务器之间提供安全连接的方法。它通过为客户端和服务器提供安全的交换密钥的方式来实现这一点,这样他们就可以使用公钥加密来保护它们的传输。找到了确切的机制here,但这对于这个答案来说并不重要。

现在,什么是https?首先,让我们谈谈HTTP。 HTTP是一种协议,用于定义Web服务器和客户端如何交谈​​和交换网页或数据。基本上,它包括来自客户端的请求,服务器使用数字消息,标题和(可选)主体进行响应。如果您熟悉编写网页,这很明显。

现在,最后,什么是HTTPS? HTTPS是使用TLS保护数据的HTTP版本。这意味着客户端和服务器可以使用他们习惯使用的相同协议,包含在加密中。

现在,让我们在node.js中谈谈这些。

使用require('tls')时,您只使用加密层,而不定义协议。这适用于任何不期望精确协议的事情,例如您的其他node.js客户端。

当您使用require('https')时,您将专门使用HTTP over TLS。 https module 实际上是 tls module的子类! (哎呀,实际上,https.Servertls.Server的子类)这意味着每当您使用https模块时,您也会使用tls。

现在,最后一个问题:浏览器需要什么?如果您一直关注我所说的一切,您可以看到浏览器需要https。事实上,您今天访问过的大部分网页都可能已经过了https。