(非)对称加密算法在https中的应用(加密过程以及CA颁发、验证)

文章目录

  • 一、(非)对称加密
    • 对称加密
    • 非对称加密
  • 二、http与https
    • 1. HTTP
      • 1.1 HTTP与TCP
      • 1.2 短/长连接(HTTP如何使用TCP)
    • 2. HTTPS = HTTP+SSL/TLS
      • 2.1 SSL/TLS:解决http问题
      • * 2.2 https 加密过程
      • 2.3 CA证书
    • 3. http/https区别

一、(非)对称加密

“加密”:明文 ==> 密文
“解密”:密文 ==> 明文

对称加密

加密和解密使用相同的密钥。对称加密只有一个秘钥,作为私钥.
(非)对称加密算法在https中的应用(加密过程以及CA颁发、验证)_第1张图片

例:
用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包,当下次要把这个压缩文件解开的时候,需要输入同样的密码。
在这个例子中,密码/口令就如同刚才说的“密钥”。

非对称加密

加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。
公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
(具体使用参考https加密过程)

二、http与https

1. HTTP

HTTP 是一个网络协议,属于应用层,专门用来传输 Web 内容(可参考文章:HTTP协议)
缺点: 明文,不安全

1.1 HTTP与TCP

HTTP 协议需要依靠 TCP 协议来传输数据
在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。

1.2 短/长连接(HTTP如何使用TCP)

假设有一个网页,里面包含图片,外部的CSS 文件和 JS 文件。

短连接:
浏览器先发起一个 TCP 连接,拿到该网页的 HTML 源代码TCP连接就关闭。
浏览器开始分析这个网页的源码,然后针对每一个外部资源,再分别发起一个个 TCP 连接
把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开)

缺点: 无状态


长连接:
浏览器先发起一个 TCP 连接,连接不会立即关闭,而是暂时先保持着(Keep-Alive),
分析 HTML 源码之后,发现外部资源,就用刚才那个 TCP 连接去抓取此页面的外部资源。

特点: 支持客户端与服务端之间的实时通信
缺点: 浪费服务端资源

设置HTTP请求和响应头的connection:keep-alive则为长连接
HTTP 1.0 短连接, HTTP 1.1 中,默认采用的是“Keep-Alive”的方式。

2. HTTPS = HTTP+SSL/TLS

2.1 SSL/TLS:解决http问题

SSL/TLS:安全套接层/传输层安全协议,这两者可以视作同一个东西的不同阶段,发明是为解决http明文传输不安全。

* 2.2 https 加密过程

step1: “客户”向服务端发送一个通信请求

"客户">>>"服务器": '你好!'

step2: “服务器”向客户发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由“服务器”持有(非对称加密)

"服务器">>>"客户":'你好!这是我的数字证书' + 公钥

step3:
“客户”收到“服务器”的证书后,验证数字证书是否是“服务器”的,如果是, “客户”会发送一个随机的字符串给“服务器”用私钥去加密:

"客户">>>"服务器":" '这是一个随机的字符串'  我不能验证你是不是服务器,你先加密这个字符串试试 "

服务器把用私钥加密的结果返回给“客户”:

"服务器": '这是一个随机的字符串'    ==私钥加密==>    '01b6xbf46aqfe7r8p9l'
"服务器">>>"客户":'01b6xbf46aqfe7r8p9l'

“客户”用公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是“服务器”。

"客户":'01b6xbf46aqfe7r8p9l'       ==公钥解密==>    '这是一个随机的字符串'
"客户">>>"服务器":'验证成功,你确实是服务器!'

step4:
验证“服务器”的身份后,“客户”生成一个 对称加密算法和密钥 ,用于后面的通信的加密和解密。这个对称加密算法和密钥,“客户”会用公钥加密后发送给“服务器”,只有“服务器”手中有可以解密的私钥。

2.3 CA证书

(非)对称加密算法在https中的应用(加密过程以及CA颁发、验证)_第2张图片

证书颁发:(图左)

  • CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,进行 Hash 计算,得到 Hash 值;
  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成签名,附加在数字证书上。

客户端校验服务端的数字证书的过程:(图右)

  • 客户端使用同样的 Hash 算法获取该证书的 Hash 值 H1;
  • 通常浏览器和操作系统中有 CA 公钥,浏览器收到证书后使用 CA 的公钥解密数字签名,得到 Hash 值 H2 ;
  • 比较 H1 和 H2,若值相同,则可信赖,否则证书不可信

3. http/https区别

  1. HTTP协议运行在TCP之上,明文,不安全;
    HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,http+SSL/TLS=https所有传输的内容都经过加密的,安全。
  2. 端口号:http80,https443
  3. HTTPS协议需要申请CA(数字证书)
    数字证书作用:【服务器向浏览器证明自己的身份】+【把公钥传给浏览器】

你可能感兴趣的:(HTTP/浏览器,https,http,加密,CA)