在本教程中,我们将了解通常称为 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 使用非对称公钥基础设施来保护通信。非对称安全系统由两个不同的非对称密钥组成,用于加密通信。这些被称为:
公钥:这是任何以安全方式使用服务器的人都可以访问的密钥。私钥能够解密由公钥加密的信息。
私钥:这是仅供网站所有者使用的密钥,因此称为私钥。它能够解密由相应的公钥加密的信息。
下图演示了公钥和私钥如何协同工作以提供非对称密钥加密。
非对称密钥加密
发生的事情是,当客户端联系服务器时,服务器反过来将公钥传输给客户端。这是通过服务器的 SSL 证书完成的。现在客户端将加密信息与公钥一起传输到服务器。拥有私钥的服务器能够解密信息并成功访问它。
另一方面,对称密钥加密使用单个“秘密密钥”进行加密和解密。在这种情况下,服务器和客户端都需要拥有相同的密钥。因此,由于用户必须共享密钥这一事实,使用这种类型的密钥加密算法是不利的。
对称密钥加密
HTTPS 通信
让我们看看客户端服务器通信是如何通过 HTTPS 协议进行的。涉及许多步骤。让我们一一列出。
首先,客户端通过连接服务器开始通信。
此时,当客户端发起连接时,服务器将SSL证书传送给客户端。SSL 证书包含公钥。
客户端现在检查 SSL 证书是否有效。
如果证书是真实的,则客户端会生成一个会话密钥。这个密钥很重要,因为它负责加密服务器和客户端之间的通信。
之前由服务器发送的公钥现在被客户端用来加密会话密钥。加密的会话密钥现在被发送到服务器。
当服务器获得加密的会话密钥时,它使用它拥有的私钥来解密信息。请记住,服务器拥有能够解密信息的相应私钥。
现在生成另一个会话密钥,用于保持客户端和服务器之间的加密通信。
下图说明了这些要点:
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 服务器。文章来源:https://www.toymoban.com/news/detail-618079.html
注:以上文章由IC先生www.mrchip.cn编辑整理发布,请勿转载。文章来源地址https://www.toymoban.com/news/detail-618079.html
到了这里,关于HTTPS和SSL/TL加密的ESP32/ESP8266介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!