HTTPS和SSL/TL加密的ESP32/ESP8266介绍

在本教程中,我们将了解通常称为 HTTPS 的安全超文本传输协议,以及使用 ESP32 和 ESP8266 开发板的 SSL/TLS 加密。本指南包括对 HTTPS 和 SSL/TLS 加密的描述、使用它的原因、SSL/TLS 加密的工作原理、使用 HTTPS 通过网络通信以及最终使用 ESP32/ESP8266 开发板生成 HTTPS 请求。让我们开始吧!

HTTPS协议介绍

与负责在客户端和服务器之间交换数据的主要协议 HTTP 不同,HTTPS 是 HTTP 的安全替代方案。在此协议中,使用 TLS(传输层安全性)或安全套接字层 (SSL) 对通信进行加密。这意味着 HTTPS 等同于添加了 TLS/SSL 安全层的 HTTP。

HTPPS 被称为安全超文本传输协议,它通过网络提供安全通信,并在访问互联网时被广泛使用。此通信协议中的消息使用以前称为安全套接字层 (SSL) 的传输层安全性 (TLS) 加密。从根本上说,它在传输数据的同时增强了数据的安全性,使用HTTPS进行加密。这对于需要登录详细信息、手机号码、地址和银行帐号的网站来说非常重要。

为什么 HTTPS 很重要?

  • HTTPS 为需要在服务器和网络浏览器之间发送敏感数据的用户提供安全和信任

  • HTTPS 使用 SSL 证书确保数据隐私和完整性以及正确识别

  • 提供针对不同攻击的保护,例如在 HTTP 情况下可以轻松启动的中间人 (MitM) 攻击。

SSL/TLS 加密

如前所述,HTTPS 使用 TLS 加密协议来保护通信。传输层安全性 (TLS) 以前称为 SSL,是当今用于 Web 通信的最广泛使用的安全加密协议。

TLS 使用非对称公钥基础设施来保护通信。非对称安全系统由两个不同的非对称密钥组成,用于加密通信。这些被称为:

  1. 公钥:这是任何以安全方式使用服务器的人都可以访问的密钥。私钥能够解密由公钥加密的信息。

  1. 私钥:这是仅供网站所有者使用的密钥,因此称为私钥。它能够解密由相应的公钥加密的信息。

下图演示了公钥和私钥如何协同工作以提供非对称密钥加密。

非对称密钥加密

发生的事情是,当客户端联系服务器时,服务器反过来将公钥传输给客户端。这是通过服务器的 SSL 证书完成的。现在客户端将加密信息与公钥一起传输到服务器。拥有私钥的服务器能够解密信息并成功访问它。

另一方面,对称密钥加密使用单个“秘密密钥”进行加密和解密。在这种情况下,服务器和客户端都需要拥有相同的密钥。因此,由于用户必须共享密钥这一事实,使用这种类型的密钥加密算法是不利的。

对称密钥加密

HTTPS 通信

让我们看看客户端服务器通信是如何通过 HTTPS 协议进行的。涉及许多步骤。让我们一一列出。

  1. 首先,客户端通过连接服务器开始通信。

  1. 此时,当客户端发起连接时,服务器将SSL证书传送给客户端。SSL 证书包含公钥。

  1. 客户端现在检查 SSL 证书是否有效。

  1. 如果证书是真实的,则客户端会生成一个会话密钥。这个密钥很重要,因为它负责加密服务器和客户端之间的通信。

  1. 之前由服务器发送的公钥现在被客户端用来加密会话密钥。加密的会话密钥现在被发送到服务器。

  1. 当服务器获得加密的会话密钥时,它使用它拥有的私钥来解密信息。请记住,服务器拥有能够解密信息的相应私钥。

  1. 现在生成另一个会话密钥,用于保持客户端和服务器之间的加密通信。

下图说明了这些要点:

HTTPS 通信概述

SSL认证

SSL 证书在 HTTPS 客户端服务器通信中非常重要。如前所述,每当客户端请求会话时,服务器都会通过发送 SSL 证书进行响应。然后,浏览器会检查此 SSL 证书以确定其有效性。每个 SSL 证书都由适当的证书颁发机构 (CA) 颁发,例如 LetsEncrypt、GeoTrust、Comodo 等。这些机构存储、签署和颁发数字安全套接字层证书。他们负责提供证书的有效性证明以及证书所有者的身份。

每当 CA 提供证书时,它都包含由权威机构签名的根证书。这是非常重要的,因为当浏览器检查 SSL 证书的有效性时,它实际上是在检查它是否包含受信任根证书数据库中的根证书。如果是,则会在浏览器栏上看到一个锁定图标。

需要注意的重要一点是不能使用已过期的 SSL 证书。

自签名 SSL 证书

SSL 证书也可以是自签名的并且可以免费使用。这些是不是由任何证书颁发机构 (CA) 颁发的公钥证书。换句话说,这些不是由任何受信任的第三方 CA 颁发的。但它们可以用于内部网络网站。

虽然自签名证书授予与证书颁发机构颁发的证书相同级别的加密,但是浏览器在检查证书的有效性时并不信任服务器。因此,该网站会显示一条警告消息“您的连接不是私密的。” 这是因为浏览器无法识别其所有者。浏览器有一个证书,但是是自签名的,因此没有经过验证。简单来说,这种情况下客户端和服务器之间的通信会被加密,但其所属网站的身份并不确定。

我们可以在我们的 DIY IoT 项目或本地网络中使用自签名证书。但是,如果您的项目需要在本地主机之外或远程任何地方访问,您应该使用来自受信任的证书颁发机构的证书。

Arduino IDE 中的 ESP32 和 ESP8266 HTTPS 请求和Web服务器

介绍完 HTTPS 通信协议后,让我们向您展示如何在 Arduino IDE 中使用 ESP32 和 ESP8266 发出 HTTPS 请求。就像 HTTP 一样,HTTPS 请求在 Arduino IDE 中以类似的方式工作。

ESP32

在适用于 ESP32 的 Arduino IDE 中有几个使用 HTTPS 请求的示例。其中一些包括:

  • File > Examples > WiFiClientSecure

  • File > Examples > HTTPClient > BasicHttpsClient

一些示例使用用于 HTTPS 的 WiFiClientSecure.h 库,而不是用于 HTTP 的 WiFiClient.h 库。端口更改为 443,主机 URL 现在为“https”。其余代码与生成 HTTP 请求的代码类似。然而,在 HTTPS 中,客户端服务器通信是加密的。

要使用 ESP32 创建 HTTPS Web 服务器,可以使用esp32_https_server 库。这个 HTTPS 服务器库可以与 ESP32 Arduino Core 一起使用,同时支持 HTTP 和 HTTPS。除了这个库,在 Arduino IDE 中没有太多支持使用 ESP32 构建 HTTPS 网络服务器。

ESP8266

Arduino IDE 中有几个使用 HTTPS 请求的 ESP8266 示例。其中一些包括:

  • File > Examples > ESP8266HTTPClient > BasicHttpsClient (This uses the ESP8266HTTPClient.h library)

  • File > Examples > ESP8266WiFi > HTTPSRequest (This uses the WiFiClientSecure.h library)

这里需要注意的重要一点是,为了使用 ESP8266 生成成功的 HTTPS 请求,请确保证书没有过期。

使用 ESP8266 构建 HTTPS Web 服务器有点困难,而且支持它的可用库也不多。

不过,ESP8266WebServerSecure.h 库用于使用 ESP8266 创建基本的 HTTPS 服务器。

注:以上文章由IC先生www.mrchip.cn编辑整理发布,请勿转载。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty是一款高性能的网络应用框架,支持SSL/TLS加密来保护网络通信的安全性。SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络通信中广泛使用的加密协议,用于在客户端和服务器之间建立安全的通信信道。 Netty提供了一些组件和类来实现SSL/TLS加密。首先,我们需要使用javax.net.ssl包中的类来创建SSLContext对象。SSLContext是SSL/TLS协议的入口点,它包含用于加密和解密数据的加密算法和密钥。我们需要为SSLContext对象配置密钥库和信任库,密钥库用于存储证书和私钥,而信任库用于存储可信的证书。 接下来,我们需要创建SslHandler对象,将其添加到Netty的ChannelPipeline中。SslHandler作为一个ChannelHandler,负责处理SSL/TLS握手过程和数据的加密解密。当建立连接时,SslHandler会自动执行握手过程,包括协商加密算法、验证证书以及生成会话密钥等。 一旦握手完成,SslHandler会将数据加密后发送到网络,并将接收到的密文解密成明文。这样可以确保在网络传输过程中的数据保密性和完整性。此外,SslHandler还提供了一些方法来获取会话信息,如远程主机的证书和协商的加密算法。 使用Netty的SSL/TLS加密功能能够有效地提高网络通信的安全性。通过配置SSLContext和添加SslHandler,我们可以方便地实现对网络通信的加密和解密。无论是在客户端还是服务器端,都可以使用Netty的SSL/TLS加密功能来保护数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值