Bootstrap

讲懂http和https


HTTP 和 HTTPS 是客户端和服务端之间传输数据的协议

  • HTTP:数据未加密明文传输,使用80端口(容易被窃听和篡改)
  • HTTPS:数据通过SSL/TLS加密后传输,使用443端口(为HTTP基础上加了SSL/TLS加密协议,用于在客户端和服务器之间提供加密通信数据完整性身份验证

1. HTTP请求过程

浏览器地址栏输入:www.baidu.com,具体发生了什么?

  1. www.baidu.com DNS域名解析,获得IP地址

    DNS域名解析即获取机器可读的IP地址的过程,过程为:浏览器缓存 – 本地DNS缓存 – hosts文件 – 递归查询域名服务器。最终获取IP地址

  2. 找到该IP地址对应的服务器,发起TCP的三次握手

  3. 建立TCP连接后发起HTTP请求

    HTTP请求报文由请求行,请求头,空格,请求正文组成

    • 请求行:请求方式(GET/POST等)+请求的资源名称(URL)+使用的HTTP协议的版本号
    • 请求头:描述客户端请求哪台主机及其端口,以及客户端的一些环境信息等
    • 空行:空行就是\r\n (POST请求时候有)
    • 请求体:POST请求的时的请求体

    下面是浏览器对 http://localhost:8081/test 的 POST 请求时发送给服务器的数据,消息体中带上参数 name=XXG&age=23

    image-20241127022402978

    下面是浏览器对 http://localhost:8081/test?name=XXG&age=23的GET 请求时发送给服务器的数据

    image-20241127022447009

  4. 服务器响应HTTP请求,浏览器得到html代码

  5. 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)(先得到html代码,才能去找这些资源)

  6. 浏览器对页面进行渲染呈现给用户

  7. 服务器关闭关闭TCP连接

1.1 三次握手和四次挥手

这里只是简述,更多细节请看计网部分

1.1.1 三次握手 (Three-Way Handshake)

三次握手是TCP建立连接的过程,确保双方准备好进行数据传输。步骤如下:

  1. 第一次握手(SYN)客户端向服务器发送一个SYN(同步序列号)报文,请求建立连接,并携带初始序列号(Seq = x
  2. 第二次握手(SYN-ACK)服务器收到SYN后,回复一个SYN+ACK(确认同步)报文,表示同意建立连接,并携带自己的初始序列号(Seq = y),同时确认客户端的序列号(Ack = x + 1
  3. 第三次握手(ACK):客户端收到SYN+ACK后,发送一个ACK(确认)报文,确认服务器的序列号(Ack = y + 1)。至此,TCP连接建立完成。

1.1.2 四次挥手 (Four-Way Handshake)

四次挥手是TCP断开连接的过程,用于确保双方都同意终止连接并保证数据传输完整。步骤如下:

  1. 第一次挥手(FIN):客户端发送一个FIN(结束标志)报文,表示它已经完成数据发送,准备关闭连接。
  2. 第二次挥手(ACK):服务器收到FIN后,回复一个ACK报文,表示收到客户端的断开请求。
  3. 第三次挥手(FIN):服务器在确认数据传输完成后,发送一个FIN报文,表示准备关闭连接。
  4. 第四次挥手(ACK):客户端收到FIN后,回复一个ACK报文,确认断开连接。至此TCP断开连接

2. SSL/TLS协议

SSL/TLS网络安全协议用于在客户端和服务器之间提供加密通信数据完整性身份验证。目前SSL已被废弃,取而代之的是更安全的TLS协议

  1. **加密通信:**通过对称加密和非对称加密,保护数据免受窃听和篡改。
  2. **身份验证:**通过数字证书验证服务器或客户端的真实性。
  3. **数据完整性:**使用消息认证码(MAC)确保数据在传输中未被篡改。

SSL/TLS实现安全通信的工作原理简述

握手阶段:

  1. 客户端和服务器协商加密算法和协议版本
  2. 服务器发送数字证书,客户端验证其真实性
  3. 生成会话密钥,并通过非对称加密安全地共享

数据加密阶段:双方使用对称加密算法加密数据,进行高效传输

2.1 SSL/TLS如何工作?

SSL/TLS使用加密技术将通信数据进行加密,使得第三方无法轻易窃听或篡改数据。在建立SSL/TLS连接时,客户端和服务器之间的通信将加密,确保数据的机密性和完整性。SSL/TLS 握手阶段和加密阶段是SSL/TLS协议中非常关键的两个阶段,它们负责建立安全连接、协商加密算法和密钥交换。下面详细介绍这两个阶段的细节:

2.1.1 SSL/TLS 握手阶段

首先TCP三次握手不变,接着SSL/TSL握手

SSL/TLS 握手阶段是安全连接的建立阶段,它确保通信的两端是合法的并且协商好了用于后续数据加密和完整性保护的密钥。

  1. 客户端Hello: 客户端向服务器ClientHello消息,包含:客户端随机数(用于生成会话密钥)、支持的SSL/TLS版本、支持的加密套件列表(加密算法)和压缩方法等信息
  2. 服务器Hello: 服务器收到客户端的ClientHello后,并回复ServerHello消息,包含:选择并确认的SSL/TLS版本、服务器随机数(用于生成会话密钥),选择的加密套件(加密算法)和选择的压缩方法
  3. 服务器发送数字证书证书:包含服务器的公钥等信息
  4. (可选)服务器密钥交换:如果选择的加密套件需要额外的密钥交换步骤(如 ECDHE 或 DHE),服务器会发送 Server Key Exchange 消息,包含密钥协商所需的参数。
  5. (可选)客户端验证服务器身份:如果服务器要求客户端提供身份验证(双向认证),服务器会发送 Certificate Request,客户端需在后续阶段提供自己的证书。
  6. 客户端验证证书: 客户端在收到服务器证书后验证证书的合法性,包括检查证书的有效期、颁发机构的信任等。如果验证失败,握手将终止。如果验证通过,则执行后续不走
  7. 客户端密钥交换:客户端生成预主密钥并用服务器公钥(证书里)加密并发送给服务器,服务端用密钥解密就能获得预主密钥
  8. 生成会话密钥: 客户端和服务器都使用主密钥来生成会话密钥(Session Key)。会话密钥是对称密钥,用于后续的数据加密和解密(会话密钥的生成:客户端随机数+服务器随机数+预主密钥=会话密钥
  9. 握手完成: 握手阶段完成后,客户端和服务器之间的通信将使用协商好的加密算法和会话密钥进行加密和解密。握手完成后,SSL/TLS连接建立成功

2.1.2 SSL/TLS 加密阶段

SSL/TLS 加密阶段是建立在握手阶段之后的,它确保数据在传输过程中的机密性和完整性。

  1. 记录协议: SSL/TLS将要传输的数据分割成小的记录(Record)块,每个记录块包括一个头部和一段数据。记录头部包含有关记录的信息,例如记录类型(数据、握手、警告等)和记录长度。
  2. 数据加密: 在记录协议的基础上,SSL/TLS使用协商好的加密算法(通常是对称加密算法,如AES)对记录的数据部分进行加密。只有拥有会话密钥的客户端和服务器才能进行正确的解密。这确保了数据在传输过程中的机密性。
  3. MAC(消息认证码): 为了保证数据的完整性,SSL/TLS使用MAC算法对记录的数据部分进行签名。这个签名随着记录一起传输,接收方使用会话密钥来验证数据的完整性,以防止数据在传输过程中被篡改。
  4. 记录压缩(可选): 在加密之前,SSL/TLS还可以对数据进行压缩,以减少传输数据的大小。不过,由于一些安全性问题,现代SSL/TLS实现通常不再使用压缩。

总结来说,SSL/TLS 握手阶段负责建立安全连接、协商加密算法和密钥交换,而SSL/TLS 加密阶段则负责实际的数据加密和完整性保护。这两个阶段共同确保了在互联网上的安全通信。

2.1.3 SSL/TLS工作思考

  1. 客户端公钥加密数据,服务端私钥解密数据也能保证数据安全,为什么非得用会话密钥对称加密保证数据安全?

    • 性能:非对称加密性能损耗大,对称加密效率高适合频繁加解密
    • 数据量:非对称加密的数据量有限制(通常只能加密比密钥长度更短的数据块),而对称加密没有
  2. 预主密钥只有客户端和服务端指导是啥,除非私钥被泄露

  3. SSL/TLS安全协议同时使用了对称加密和非对称加密,前期获取会话密钥的过程都是非对称加密,后续通信数据传输都使用会话密钥进行对称加密

  4. 私钥万万不能泄露。前期客户端随机数和服务端随机数都是明文,后面客户端生成的预主密钥为公钥加密传输。如果私钥泄露,黑客可以通过客户端随机数、服务端随机数和预主密钥获得会话密钥,那https在黑客眼里依旧是裸奔了

3. 为什么用HTTPS?

HTTPS的主要目的是保护用户和网站之间的数据安全。当你在使用HTTPS连接的网站上输入敏感信息,例如登录凭据或信用卡号码时,这些信息将被加密传输,使其难以被窃听。

此外,HTTPS还提供了网站身份的验证。用户可以通过查看浏览器地址栏上的锁定图标或网站的数字证书来确认他们连接到的是一个受信任的网站,而不是一个恶意网站。

HTTPS解决了以下几个重要问题,这些问题在HTTP中存在,而HTTPS通过加密和身份验证机制来解决它们:

  1. 数据加密:HTTP传输的数据是明文的,容易被中间人窃听或篡改。HTTPS通过使用SSL/TLS协议,对数据进行加密,确保数据在传输过程中无法被窃听,保护用户隐私和敏感信息的安全。
  2. 身份验证:在HTTP中,服务器无法验证客户端的身份,也就是无法确定用户是否与他们通信的网站真实的服务器进行通信。HTTPS通过数字证书,确保客户端正在与合法的服务器通信,减少了中间人攻击的风险。
  3. 数据完整性:HTTP通信不提供数据完整性保护。攻击者可以在传输过程中篡改数据,导致内容损坏或潜在的安全漏洞。HTTPS通过使用加密哈希算法,确保数据在传输过程中没有被篡改,保持数据的完整性。
  4. 信任和SEO:HTTPS网站通常受到更多的信任,因为它们提供了更高级别的安全性。搜索引擎(如Google)将HTTPS网站排名得更高,这对于网站的SEO(搜索引擎优化)非常重要。
  5. 遵守法规和标准:一些法规和标准要求在网站上处理敏感数据(如信用卡信息、医疗记录等)时使用HTTPS来确保数据的保护。遵守这些法规对于企业和网站来说是必要的。

总的来说,HTTPS解决了HTTP存在的不安全性和隐私问题,为网站和用户提供了更高级别的保护,增加了信任度,并满足了法规和标准的要求。因此,HTTPS已经成为保护隐私和数据安全的标准协议,几乎所有的网站都应该考虑使用它来提供更安全的在线体验。

HTTP、SSL/TLS、HTTPS和TCP/IP是在网络通信中密切相关的协议和概念,它们之间的关系如下:

  1. TCP/IP:TCP/IP是互联网通信的基础协议套件,它包括TCP和IP

    IP协议负责在网络中寻址和路由数据包,而TCP协议负责在网络上建立可靠的连接,确保数据的可靠传输。

  2. HTTP:HTTP是一种应用层协议,它建立在TCP/IP协议之上。HTTP定义了Web浏览器和Web服务器之间的通信规则

    当您在浏览器中输入URL并按下回车时,浏览器会使用HTTP协议向Web服务器请求网页,然后服务器会响应并返回请求的网页。

  3. SSL/TLS:SSL/TLS是用于加密和保护网络通信的安全协议,它工作在传输层

    SSL/TLS用于在客户端和服务器之间建立安全通信通道,确保数据的机密性和完整性。它不仅可以用于保护HTTP通信,还可以用于保护其他应用层协议的通信。

  4. HTTPS:在HTTP基础上加入SSL/TLS安全协议,用于数据加密通信数据完整性身份验证

综上所述,TCP/IP是底层的协议套件,提供了网络通信的基础。HTTP是应用层协议,建立在TCP/IP之上,用于定义Web通信规则。SSL/TLS是传输层的安全协议,用于加密和保护通信。HTTPS是HTTP和SSL/TLS的结合,用于创建安全的Web通信通道。因此,HTTPS通常包括了HTTP、SSL/TLS和TCP/IP协议的功能,以确保安全的Web浏览和数据传输

;