如何在Node.js中使用SSL / TLS

在2020年,您的网站没有理由不使用HTTPS。访客期望它,Google将其用作排名因素,浏览器制造商很乐意于点名那些没有使用它的网站。在本教程中,我将引导您通过一个实际示例,

说明如何将Let's Encrypt生成的证书添加到Express.js服务器。但是,仅使用HTTPS保护我们的网站和应用程序还不够。我们还应该要求正在与之通信的服务器进行加密连接。我们将看到有可能激活SSL / TLS层,即使默认情况下未启用它也是如此。

注意:如果您在配置NGINX作为Node应用程序的反向代理时正在寻找有关如何使用NGINX设置SSL的说明,请查看我们的快速提示“ 使用Node.js配置NGINX和SSL  ”。

让我们从简短回顾一下HTTPS的当前状态开始。

一、HTTPS无处不在

HTTP / 2规范于2015年5月以RFC 7540的形式发布,这意味着它是该标准的一部分。这是一个重要的里程碑。现在,我们都可以将服务器升级为使用HTTP / 2。最重要的方面之一是与HTTP 1.1的向后兼容性以及选择不同协议的协商机制。尽管该标准未指定强制加密,但是当前没有浏览器支持未加密的HTTP / 2。这给HTTPS带来了另一个提升。终于,HTTPS无处不在!

我们的堆栈实际上是什么样的?从浏览器中运行的网站(在应用程序级别)的角度来看,我们必须遍历以下几层才能达到IP级别:

1.客户端浏览器、

2.HTTP、

3.SSL / TLS、

4.TCP协议、

5.知识产权

HTTPS就是SSL / TLS之上的HTTP协议。因此,所有HTTP规则仍然适用。这个额外的层实际上给了我们什么?有很多优点:我们通过拥有密钥和证书来进行身份验证;由于以非对称方式对连接进行加密,因此可以确保某种类型的隐私和机密性;并且还保留了数据完整性,因为传输的数据在传输过程中无法更改。

最普遍的神话之一是,使用SSL / TLS的计算量很大,并且会降低服务器的速度。这肯定不再是事实。我们也不需要带有加密单元的任何专用硬件。即使对于Google而言,SSL / TLS层也占不到CPU负载的1%,与HTTP相比,HTTPS的网络开销也低于2%。总而言之,为了节省一些开销,放弃HTTPS是没有意义的。

最新版本是TLS 1.3。TLS是SSL的后继产品,最新版本的SSL 3.0中提供了TLS。从SSL到TLS的更改排除了互操作性,但是基本过程保持不变。我们有三个不同的加密通道。第一个是用于证书链的公钥基础结构。第二种提供用于密钥交换的公共密钥加密。最后,第三个是对称的。在这里,我们有用于数据传输的密码学。

TLS 1.3对某些重要操作使用哈希处理。从理论上讲,可以使用任何哈希算法,但是强烈建议使用SHA2或更强大的算法。SHA1长期以来一直是标准,但最近已过时。

HTTPS也越来越受到客户的关注。隐私和安全问题一直存在,但是随着在线可访问数据和服务数量的增长,人们越来越关注。对于那些未实现此功能的网站,有一个有用的浏览器扩展-EFF的HTTPS Everywhere-可加密我们与大多数网站的通信。

创建者意识到许多网站仅部分提供HTTPS。该插件使我们可以重写仅提供部分HTTPS支持的网站的请求。另外,我们也可以完全阻止HTTP(请参见上面的屏幕截图)。

二、基本说明

证书的验证过程包括验证证书签名和有效期。我们还需要验证它是否链接到受信任的根。最后,我们需要检查它是否已被撤销。世界上有专门的可信赖的机构来颁发证书。如果其中之一遭到破坏,则来自该机构的所有其他证书将被吊销。

HTTPS握手的序列图如下所示。我们从客户端初始化开始,然后是带有证书和密钥交换的消息。服务器发送完成的包后,客户端可以开始密钥交换和密码规范传输。至此,客户端结束。最后,服务器确认密码规范选择并关闭握手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值