文章目录
一、(非)对称加密
“加密”:明文 ==> 密文
“解密”:密文 ==> 明文
对称加密
加密和解密使用相同的密钥。对称加密只有一个秘钥,作为私钥.
例:
用 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证书
证书颁发:(图左)
- CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,进行 Hash 计算,得到 Hash 值;
- 然后 CA 会使用自己的私钥将该 Hash 值加密,生成签名,附加在数字证书上。
客户端校验服务端的数字证书的过程:(图右)
- 客户端使用同样的 Hash 算法获取该证书的 Hash 值 H1;
- 通常浏览器和操作系统中有 CA 公钥,浏览器收到证书后使用 CA 的公钥解密数字签名,得到 Hash 值 H2 ;
- 比较 H1 和 H2,若值相同,则可信赖,否则证书不可信
3. http/https区别
- HTTP协议运行在TCP之上,明文,不安全;
HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,http+SSL/TLS=https所有传输的内容都经过加密的,安全。 - 端口号:http80,https443
- HTTPS协议需要申请CA(数字证书)
数字证书作用:【服务器向浏览器证明自己的身份】+【把公钥传给浏览器】