HTTP及HTTPS协议详解

一、HTTP协议

1. HTTP协议简介

HTTP(HyperText Transfer Protocol),超文本传输协议,规定了浏览器和服务器之间数据传输的规则。HTTP 是应用层协议,它以 TCP(传输层)作为底层协议,默认端口为 80

2. HTTP协议特点

HTTP协议有它自己的一些特点,分别是:

  • 基于TCP协议:面向连接,安全
    TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全。

  • 基于请求-响应模型的:
    请求和响应是一一对应关系

  • HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的。
    无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。这种特性有优点也有缺点,

    • 缺点:多次请求间不能共享数据
    • 优点:速度快

3. HTTP协议通信过程

HTTP 通信过程主要如下:

(1)服务器在 80 端口等待客户的请求。
(2)浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。
(3)服务器接收来自浏览器的 TCP 连接。
(4)浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
(5)关闭 TCP 连接。

4. HTTP优缺点

优点:

  • http的灵活性高,可扩展性强。从http1.0到http1.1再到http2.x,http协议一直在进行扩展新的属性。
  • 可靠传输。因为http协议是基于tcp协议的一种应用层协议,tcp协议就是可靠传输协议。
  • 请求应答,有来有回。
  • 无状态的。每一个请求都是相互独立的,默认不需要保存上下文的信息,处理速度快。

缺点:

  • 明文传输不安全
  • 复用一个TCP连接,会发生对头阻塞情况。
  • 无状态的,因此无法做连续多个步骤的操作。例如:加入购物出,结算,支付。每次都需要验证身份信息,但是无状态所以无法连续。解决办法就是利用会话技术(Cookie、Session)。

二、HTTPS协议

1. HTTPS协议简介

HTTPS 协议(Hyper Text Transfer Protocol Secure),是 HTTP 的加强安全版本。HTTPS 是基于 HTTP 的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。可以理解成HTTPS = HTTP + SSL/TLS。默认端口号是 443。

2. SSL/TLS协议

SSL 指安全套接字协议(Secure Sockets Layer),首次发布于 1996 年。 SSL 的首次发布其实已经是他的 3.0 版本,SSL 1.0 从未面世,SSL 2.0 则具有较大的缺陷(DROWN 缺陷——Decrypting RSA with Obsolete and Weakened eNcryption)。很快,在 1999 年,SSL 3.0 进一步升级,新版本被命名为 TLS 1.0。因此,TLS 是基于 SSL 之上的,但由于习惯叫法,通常把 HTTPS 中的核心加密协议混成为 SSL/TLS。

3. SSL/TLS工作原理

3.1 非对称加密

SSL/TLS的核心要素是非对称加密。非对称加密采用两个密钥——一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。
常用的非对称加密算法:RSA。

  • 优点: 算法公开,加密和解密使用不同的钥匙,私钥不需要通过网络进行传输,安全性很高。
  • 缺点: 计算量比较大,加密和解密速度相比对称加密慢很多。

比如在某个自助邮局,每个通信信道都是一个邮箱,每一个邮箱所有者都在旁边立了一个牌子,上面挂着一把钥匙:这是我的公钥,发送者请将信件放入我的邮箱,并用公钥锁好。
但是公钥只能加锁,并不能解锁。解锁只能由邮箱的所有者——因为只有他保存着私钥。这样,通信信息就不会被其他人截获了,这依赖于私钥的保密性

在这里插入图片描述
非对称加密的公钥和私钥需要采用一种复杂的数学机制生成(密码学认为,为了较高的安全性,尽量不要自己创造加密方案)。公私钥对的生成算法依赖于单向陷门函数

单向函数:已知单向函数 f,给定任意一个输入 x,易计算输出 y=f(x);而给定一个输出 y,假设存在 f(x)=y,很难根据 f 来计算出 x。
单向陷门函数:一个较弱的单向函数。已知单向陷门函数 f,陷门 h,给定任意一个输入 x,易计算出输出 y=f(x;h);而给定一个输出 y,假设存在 f(x;h)=y,很难根据 f 来计算出 x,但可以根据 f 和 h 来推导出 x。

在这里插入图片描述
比如上图就是一个单向函数,任何人都可以容易的把水果榨成果汁,但想从果汁中得到都有哪些水果就是很困难的。

在这里,函数 f 的计算方法相当于公钥,陷门 h 相当于私钥。公钥 f 是公开的,任何人对已有输入,都可以用 f 加密,而要想根据加密信息还原出原信息,必须要有私钥才行。

3.2 对称加密

使用 SSL/TLS 进行通信的双方需要使用非对称加密方案来通信,但是非对称加密设计了较为复杂的数学算法,在实际通信过程中,计算的代价较高,效率太低,因此,SSL/TLS 实际对消息的加密使用的是对称加密。

对称加密: 通信双方共享唯一密钥 k,加解密算法已知,加密方利用密钥 k 加密,解密方利用密钥 k 解密,保密性依赖于密钥 k 的保密性
在这里插入图片描述
常见的对称加密算法有:DES、3DES和AES等

  • 优点: 算法公开、计算量小、加密速度快、加密效率高,适合加密比较大的数据。
  • 缺点:
    1. 交易双方需要使用相同的密钥,也就无法避免密钥的传输,而密钥在传输过程中可能会被截获,因此对称加密的安全性得不到保证
    2. 每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一密钥,这会使得发收信双方所拥有的钥匙数量急剧增长,密钥管理成为双方的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。

对称加密的密钥生成代价比公私钥对的生成代价低得多,那为什么 SSL/TLS 还需要使用非对称加密呢?
因为对称加密的保密性完全依赖于密钥的保密性。在双方通信之前,需要商量一个用于对称加密的密钥。我们知道网络通信的信道是不安全的,传输报文对任何人是可见的,密钥的交换肯定不能直接在网络信道中传输。因此,使用非对称加密,对对称加密的密钥进行加密,保护该密钥不在网络信道中被窃听。这样,通信双方只需要一次非对称加密,交换对称加密的密钥,在之后的信息通信中,使用绝对安全的密钥,对信息进行对称加密,即可保证传输消息的保密性。

4. HTTPS的优缺点

优点

  • 安全性
    • 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
    • HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中被窃取、改变,能确保数据的完整性。
    • HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅度增加了中间人攻击的成本。
  • SEO方面
    • 谷歌曾在2014年8月份调整搜索引擎算法,并称"比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高"。

缺点

  • 在相同网络环境中,HTTPS相比HTTP无论是响应时间还是耗电量都有大幅度上升。
  • HTTPS的安全是有范围的,在黑客攻击、服务器劫持等情况下几乎起不到作用。
  • 在现有的证书机制下,中间人攻击依然有可能发生。
  • HTTPS需要更多的服务器资源,也会导致成本的升高。

5. HTTPS的工作过程

HTTPS加密、解密、验证及数据传输过程如下:
在这里插入图片描述

  1. 客户端请求 HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。

  2. 采用 HTTPS 协议的服务器必须要有一套数字 CA (Certification Authority)证书(证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书 ,当然了是要钱的,安全级别越高价格越贵)。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。

  3. 服务器响应客户端请求,将证书传递给客户端。 证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。(Chrome 浏览器点击地址栏的锁标志再点击证书就可以看到证书详细信息。)

  4. 客户端解析证书并对其进行验证。 如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
    如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥A。然后客户端还会生成一个随机码 KEY,并使用公钥A将其加密。

  5. 客户端把加密后的随机码 KEY 发送给服务器,作为后面对称加密的密钥。

  6. 服务器在收到随机码 KEY 之后会使用私钥B将其解密。 经过以上这些步骤,客户端和服务器终于建立了安全连接,完美解决了对称加密的密钥泄露问题,接下来就可以用对称加密愉快地进行通信了。

  7. 服务器使用密钥 (随机码 KEY)对数据进行对称加密并发送给客户端,客户端使用相同的密钥 (随机码 KEY)解密数据。

  8. 双方使用对称加密愉快地传输所有数据。

三、HTTP与HTTPS的区别

HTTPHTTPS
端口80443
URL前缀http://https://
安全性无加密,安全性较差有加密机制,安全性较高
资源消耗较少由于加密处理,资源消耗更多
响应速度
是否需要证书不需要需要
协议运行在TCP协议之上运行在SSL协议之上,而SSL运行在TCP协议之上
  • 端口号 : HTTP 默认是 80,HTTPS 默认是 443。
  • URL 前缀 : HTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://。
  • 安全性: 最最重要的区别就是安全性,HTTP 明文传输,不对数据进行加密安全性较差。HTTPS (HTTP + SSL / TLS)的数据传输过程是加密的,安全性较好。
  • 资源消耗 : 由于 HTTPS 是建构在 SSL/TLS 之上的 HTTP 协议,要进行加密处理,所以要比 HTTP 更耗费服务器资源。
  • 响应速度: HTTP 页面响应速度比 HTTPS 快,这个很好理解,由于HTTPS加了一层安全层,建立连接的过程更复杂,也要交换更多的数据,难免影响速度。
  • 是否需要证书: 使用HTTP协议不需要证书。而使用 HTTPS 协议需要申请 CA 证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、DigiCert 和 GlobalSign 等。
  • 底层协议: HTTP基于TCP协议;HTTPS基于 SSL/TLS 协议,而SSL又运行在TCP协议之上。

本文参考链接:
https://blog.csdn.net/weixin_47450807/article/details/123783209
https://javaguide.cn/cs-basics/network/http&https.html#ssl-tls-%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86
https://segmentfault.com/a/1190000021494676

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值