node.js - 需要 ('https' )与需要 ('tls' )

标签 node.js security ssl express

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

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

无论如何,我像疯子(疯子)一样在网上搜索,试图找出以下内容:

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

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

谢谢

最佳答案

让我们真正开始了解 TLS 是什么。

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

现在,什么是 https?好吧,先来说说HTTP . HTTP 是一种协议(protocol),它定义了 Web 服务器和客户端如何交谈​​和交换网页或数据。基本上,它包括来自客户端的请求,服务器以数字消息、 header 和(可选)正文进行响应。如果您熟悉编写网页,这是显而易见的。

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

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

当你使用 require('tls') 时,你只使用了加密层,没有定义协议(protocol)。这适用于不需要精确协议(protocol)的任何东西,例如您的其他 node.js 客户端。

当您使用 require('https') 时,您具体使用的是基于 TLS 的 HTTP。 https module 实际上是 tls module的子类! (糟糕,实际上,https.Servertls.Server 的子类)这意味着无论何时您使用 https 模块,您也在使用 tls一个。

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

关于node.js - 需要 ('https' )与需要 ('tls' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24162350/

相关文章:

java - 无法为 spring security 提供自定义身份验证提供程序

php - 如何确定访问者的ip?

python - 编程 https 代理卡住了 - 下一步该怎么做?

node.js - 如何防止 node.js 崩溃?尝试捕捉不起作用

node.js - 使用数字 Seamless/nodejs-bower-grunt docker 镜像对 npm 和 Bower 安装进行 Docker 化

android - 在 Android/Java 和 C# 中计算 SHA256 哈希

android - 接受带有自签名证书的 HTTPS 连接

ssl - 错误加载扩展部分 v3_ca [centos7]

node.js - 在 Mongodb 中插入不带 ObjectId 的文档

javascript - componentDidMount() 中的 "This is undefined"错误