http和https区别

https://blog.csdn.net/qq_38289815/article/details/80969419
https://www.jianshu.com/p/25313dbd2e46
https://juejin.cn/post/6945369639811547166

http 超文本传输协议 80(常用端口号)
  • 明文传输数据,(黑客获取浏览器和服务器间的传输报文,可直接读取信息)
  • 连接无状态(ps:http3.0了,udp协议,有状态缓存了,这是之前)(不是无连接),即数据包的发送、传输、接收都互相独立
  • tcp三次握手连接

无状态:客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接

https超文本传输安全协议 443(常用端口号)
  • http+SSL/TLS加密协议
  • 可进行加密传输、身份认证的网络协议
  • ssl建立连接通道,位于http和tcp/ip之间

ssl协议:SSL 协议可分为两层:

  • SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
  • SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
http建立连接
image.png
  • 客户端通过标志位发送syn = j 给服务器端,表示想要建立连接,然后进入syn_send状态
  • 服务端接收到标志位后,返回ack = (j+1) 应答标识给客户端,同时发送syn = k包,表示可以进入连接,并进入syn_recv状态
  • 客户端收到syn+ack应答标志后,回传ack=(k+1)包给服务器端,表示已经收到了ack标志,发送完毕后,进入established(已建立)状态

为什么会有三次握手而不是两次握手呢?
答:tcp有超时重连机制

https建立连接

最简化连接过程


image.png
  • 客户端发送请求到服务端
  • 服务端返回公钥和证书到客户端
  • 客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数(对称密钥),用公钥对其加密,连同证书一起发送到服务端
  • 服务器端验证客户端证书
  • 服务端接收到这个加密后的随机数后会用私钥对其解密得到真正的随机数
  • 客户端告诉服务器端,后续会使用上面的随机数作为对称密钥,同时通知服务器端,客户端握手过程结束
  • 服务器端告诉客户端,后续会使用上面的随机数作为对称密钥,同时通知客户器端,服务器端握手过程结束

// 通讯开始(这个时候不需要非对称加密了)

  • 服务器端用这个随机数当做对称密钥,对需要发送的数据进行对称加密
  • 客户端在接收到加密后的数据,使用对称加密的密钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户

SSL加密建立

https优点
  • 用户和服务器双向验证,确保数据发送正确
  • 由ssl和http建立加密传输、身份认证的网络协议,防止数据传输过程中被盗取
  • 虽不是绝对安全,但是增加了攻击成本
  • 防止了重放攻击(重放攻击:获取到加密数据后,不解密,直接重传加密数据包)
https缺点
  • 需要申请ca(Certificate Authority,证书颁发机构)证书,大部分都是花钱的
  • HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
  • HTTPS 协议握手阶段比较费时
  • HTTPS 连接缓存不如 HTTP 高效,会增加数据开销(【可以不说】)

你可能感兴趣的:(http和https区别)