【网络】http & https

目录

1. http

特点

存在的问题

http报文格式

request header常见字段

2. https

SSL

SSL握手过程

为什么数据传输过程不用非对称加密?

为什么ssl是安全的不会被第三方攻击?

http与https对比


1. http

http超文本传输协议,是一种应用层协议。

特点

  • 无状态:客户端访问完一次服务器再次访问的时候,服务器是无法知道这个客户端之前是否已经访问过了(所以有了Cookie和Session)。
  • http 1.1 持久连接keepalive:服务器在响应后不关闭TCP连接,仍然在一段时间内保持这条连接,客户端可以通过这个连接继续请求。
  • 简单快速(请求方法简单Get和POST)
  • 灵活(数据对象随意)

存在的问题

  • 耗时:传输数据每次都要建立连接
  • 不安全:明文传输
  • Header大:一般客户端的请求header变化较小,但是每次都要携带
  • keepalive压力大:会给服务器造成大量的性能压力

http报文格式

报文:传输单元,即一次性发送的数据块。由一行一行组成的,纯文本,而且是明文

请求报文:

  • 请求行:包括请求方法(如GET、POST等)、请求的URL、HTTP协议版本,这三者之间用空格分隔,并以CRLF(回车换行)结尾。
  • 请求头部:由多个字段组成,每个字段都有“字段名: 字段值”,字段之间以CRLF分隔。请求头部用于告知服务器请求的更多信息。
  • 请求主体(可选):这部分携带了本次请求需要发往服务端的信息,比如POST请求通常会包含请求主体。

响应报文:

  • 状态行:包括HTTP协议版本、状态码、状态描述,来标识请求的处理结果,如200表示成功,404表示未找到资源等。
  • 响应头部:由多个字段组成,每个字段都有“字段名: 字段值”,
  • 响应主体(可选):通常包含服务器返回给客户端的数据。

常见状态码:

  • 1xx:服务器已接收,但客户端可能仍要继续发送
  • 2xx:成功
  • 3xx:重定向
  • 4xx:请求非法,或者请求不可达
  • 5xx:服务器内部错误

request header常见字段

  • Host:目标服务器的域名或IP
  • User-Agent:发送请求的用户代理。通常是浏览器的标识,通过这个字段,服务器可以了解客户端的类型和版本
  • Accept:客户端可以接受的内容类型。如html、json、xml
  • Content-Type:请求体类型。如text/html、json
  • Authorization:身份验证凭据,用于认证
  • Cookie:上一次响应中设置的服务器的Cookie,用于跟踪用户的会话状态
  • Content-Length:确定要接收多少数据(对HTTP/1.0 和 HTTP/1.1,HTTP/2 使用帧来分割数据)

2. https

HTTP+SSL协议组合的一种加密传输协议。

SSL

  • 非对称加密算法(如RSA):交换密钥
  • 消息认证码(MAC)校验数据:在传输过程中,数据会被加上一个MAC值,这个值是通过一个哈希函数和共享的密钥计算得出的。接收方在收到数据后,会重新计算MAC值并与发送方提供的MAC值进行比较。
  • 服务器申请CA证书:服务器向一个可信的证书颁发机构(CA)申请一个数字证书,包含了服务器的公钥和一些其他信息,并由CA使用其私钥进行签名。当客户端与服务器建立SSL连接时,服务器会将其数字证书发送给客户端。客户端会验证这个证书的有效性,包括检查证书是否由受信任的CA颁发、证书是否过期、证书中的域名是否与正在访问的域名匹配等。
  • 使用证书中的公钥与服务器交换密钥

SSL握手过程

ssl握手共9个包,过程:
  • Client Hello:client->server, 消息包含ssl版本、加密算法
  • Server Hello:server->client,server选择一个ssl版本和加密算法发给client,并发给client CA证书
  • 客户端验证证书:把数字证书和本地的根证书进行比对检查合法性,如果验证通过,就从证书中取出服务器的公钥
  • 客户端生成预主密钥并加密:客户端生成一个预主密钥(Pre-Master Secret),使用之前从CA中提取出的公钥对预主密钥进行加密,将加密后的预主密钥发送给服务器
  • 服务器解密预主密钥:服务器使用自己的私钥解密客户端发送的加密预主密钥,得到原始的预主密钥。
  • 生成会话密钥:客户端和服务器都拥有了相同的预主密钥,使用预主密钥等信息,计算出会话密钥(Session Key),用于后续的加解密
  • 交换完成通知:客户端和服务器都会发送一个Change Cipher Spec消息给对方,告知对方后续传输将使用会话密钥进行加密
  • 加密数据传输:完成以上步骤后,客户端和服务器就可以使用会话密钥进行加密通信了
注意:
  • CA申请是握手之前就已经完成的
  • 关于根证书和数字证书:
  • 根证书:证书颁发机构(CA)自己颁发的自签名证书,包含公钥,用于验证其他证书的有效性
  • 数字证书:服务端向CA机构请求颁发的证书,包含用户身份和公钥,用于身份验证
  • 客户端的CA公钥与CA对服务器提供的公钥进行签名的私钥是一对
  • 握手后的后续数据通信都使用会话密钥,是对称加密方式

为什么数据传输过程不用非对称加密?

ssl的 连接过程,使用非对称加密(如RSA) 进行密钥交换和身份验证,但在 数据传输 阶段,用的是 对称加密。
原因:
  • 非对称加密效率低: 加解密速度慢
  • 非对称加密只能实现单向的加解密:一对公私钥,公钥用于加密,私钥用于解密。即 服务端向客户端发公钥,自己保留私钥,客户端利用公钥加密预主密钥,把预主密钥发给服务端,服务端利用自己的私钥解密。

为什么ssl是安全的不会被第三方攻击?

  • 非对称加密进行密钥交换和身份验证: 只有拥有私钥的服务端能够解密预主密钥,生成会话密钥。 第三方即使截获了传输的数据也无法解密,因为没有私钥。
  • 数字证书验证:客户端通过验证证书的有效性来确认服务器的身份,防止黑客冒充服务器与客户端进行通信。
  • 消息鉴别码(MAC)验证数据的完整性:通过Hash函数实现,可以确保数据在传输过程中没有被篡改

http与https对比

http
https
安全性
无状态、明文传输,没有 加密处理
SSL 对网站与客户端之间传输的数据进行加密,保证数据安全性
响应速度
更快, 只需三次握手
除了要三次握手,还需要 SSL 握手,一共需要12 个包
资源消耗
消耗少
连接过程更长,加解密消耗多
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值