Skip to content

HTTP和HTTPS的区别

专题简介

  • 什么是 http 协议
  • http 特点
  • 什么是 https
  • https 特点

什么是 http 协议

超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于 TCP/IP 协议传输数据,互联网上应用最为广泛的一种网络协议,所有的 WWW 文件都必须遵守这个标准。设计 HTTP 的初衷是为了提供一种发布和接收 HTML 页面的方法。

http 特点

  • 无状态,无连接
  • 通信是明文的
  • 简单快速、灵活
  • 没有验证通信方的身份
  • 无法保证数据的完整性

什么是 https

https 不是一个具体的协议,是在 HTTP 基础上进行了 SSL/TLS 加密处理,本质还是 HTTP 通信,在数据传输之前,TCP 握手时候利用 SSL/TLS 建立全信道,加密数据包。 HTTPS 使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

TLS 是传输层加密协议,前身是 SSL 协议,由网景公司 1995 年发布,有时候两者不区分。

https 特点

  • 内容加密:采用混合加密技术,中间者无法直接查看明文内容
  • 验证身份:通过证书认证客户端访问的是自己的服务器
  • 保护数据完整性:防止传输的内容被中间人冒充或者篡改

https 加密技术

采用非对称加密+对称加密(混合加密技术)来进行加密,就是用非对称加密来沟通获取到对称加密需要的密钥,然后在后续的网络通信中使用对称算法进行加密和解密

为什么需要采用混合加密技术?

  • 如果通过对称加密进行前期的加密沟通,那么加密不够严谨,公钥容易被泄露
  • 如果全部使用非对称加密进行通信,因为非对称加密比较复杂这样数据传输比较慢
  • 所以为了保证前期的加密协商不被窃取以及后期数据的传输效率,加密协商密钥的获取阶段通过非对称加密来协商,后期的数据通信- 通过对称加密来进行通信

什么是对称加密

就是客户端和服务端使用同一个公钥对内容进行加密和解密。

对称加密的问题

如果客户端和服务端共同持有一个公钥,并且没有被别人知道,那数据进行密钥加密的是安全的。 但是服务端如何把自己拥有的密钥给到客户端?假设服务端生成的密钥通过明文给到客户端,在这个过程中密钥被第三方截取了,那么客户端通过这个密钥进行加密的文件,第三方就可以被截取到

什么是非对称加密

就是由服务端同时生成一对公钥和私钥,通过公钥加密文件,需要对应的私钥解密文件。

非对称加密的问题

客户端需要通过服务端生成的公钥进行加密,所以客户端和服务端协商加密规则时,服务端会把公密给到客户端,如果这个期间第三方截取了服务端给到公钥,同时用它生存的公钥匙替换掉服务器的公钥,那么客户端拿到公钥之后进行加密,将数据传给服务端的时候,第三方截取数据,然后用它的私钥进行解密,就可以截取客户端的数据。

什么是数字签名

CA 机构对服务器上传的.crt 文件进行签名验证数据的真实性和完整性

验证服务端的身份

客户端如何知道它拿到的公钥是服务器给的不是伪造?通过数字证书验证公钥的身份。

数字证书

就是一个.crt 文件,一种验证电脑身份的机制,由数字颁发机构 CA 颁发。

数字证书内容

公钥,申请者,域名等其他的信息。

验证数据的真实性和完整性

客户端如何保证拿到的数字证书是真实的并且完整的?

摘要

将数字证书.crt 进行 hash,就生成了一个摘要,生成摘要之后是不可逆的。

摘要的作用

主要是将明文的数字证书进行加密处理再进行数字签名

为啥要先生成摘要再加密呢,不能直接加密?

因为使用非对称加密是非常耗时的。如果把整个证书内容都加密生成签名的话,客户端验验签也需要把签名解密,证书明文较长,客户端验签就需要很长的时间,而用摘要的话,会把内容很长的明文压缩成小得多的定长字符串,客户端验签的话就会快得多。

如何进行数字签名

对数字证书进行签名,验证数字证书的真实和完整性,CA 机构用自己的私密对摘要进行加密,生成一个数字签名。

如何申请数字证书

  • 服务器将公钥,申请者,域名等其他的信息生成一个.crt 文件然后给到 CA 机构
  • CA 机构收到申请,验证申请者信息,如果没有异常,CA 机构通过.crt 这个明文文件做一个 HASH,得到一个信息摘要。
  • CA 机构用自己的私钥对 HASH 进行加密,得到一个秘文,这就是数字签名
  • 然后通过数字签名+.crt 明文生成一个数字证书

数字签名如何验证数字证书的真实性

  • 浏览器通过 CA 证书提供的公钥对数字签名进行解密得到 hash 值
  • 浏览器再通过 CA 证书提供的公钥对 crt 原文进行 hash 值处理
  • 将数字签名生成的 hash 值和.crt 原文生成的 hash 值进行对比,如果相等,那么数字证书就是完整的。

如何验证颁发机构权威性

通过上面的步骤已经可以验证公钥的身份,以及数字证书的完整性和真实性,但是假如 CA 机构是被第三方入侵者伪造的?这里就需要验证颁发机构的权威性,需要验证颁发机构的权威性,那么就需要更权威的颁发机构来验证,所以就会有一个根证书颁发机构,这个根证书颁发机构是被大家公认的权威机构,通过根证书颁发机构给中证书颁发机构受信,再由中证书颁发机构给用户证书颁发机构授信,来保证用户证书颁发机构的权威性。

证书链

用户颁发机构的权威性是通过证书链来验证的, 证书链主要是有根证书(根证书颁发机构颁发的证书),中间证书(中间证书颁发机构颁发的证书),用户证书(用户证书颁发机构颁发的证书)三部分组成,只有这三个证书都通过了,那么才能证明用户颁发机构证书的权威性。

加密原理