发布时间:2024-06-24 19:01
“加密”:明文 ==> 密文
“解密”:密文 ==> 明文
例:
用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包,当下次要把这个压缩文件解开的时候,需要输入同样的密码。
在这个例子中,密码/口令就如同刚才说的“密钥”。
加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。
公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
(具体使用参考https加密过程)
HTTP 是一个网络协议,属于应用层,专门用来传输 Web 内容(可参考文章:HTTP协议)
缺点: 明文,不安全
HTTP 协议需要依靠 TCP 协议来传输数据
在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。
假设有一个网页,里面包含图片,外部的CSS 文件和 JS 文件。
短连接:
浏览器先发起一个 TCP 连接,拿到该网页的 HTML 源代码TCP连接就关闭。
浏览器开始分析这个网页的源码,然后针对每一个外部资源,再分别发起一个个 TCP 连接
把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开)
缺点: 无状态
长连接:
浏览器先发起一个 TCP 连接,连接不会立即关闭,而是暂时先保持着(Keep-Alive),
分析 HTML 源码之后,发现外部资源,就用刚才那个 TCP 连接去抓取此页面的外部资源。
特点: 支持客户端与服务端之间的实时通信
缺点: 浪费服务端资源
设置HTTP请求和响应头的connection:keep-alive
则为长连接
HTTP 1.0 短连接, HTTP 1.1 中,默认采用的是“Keep-Alive”的方式。
SSL/TLS:安全套接层/传输层安全协议,这两者可以视作同一个东西的不同阶段,发明是为解决http明文传输不安全。
step1: “客户”向服务端发送一个通信请求
\"客户\">>>\"服务器\": \'你好!\'
step2: “服务器”向客户发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由“服务器”持有(非对称加密)
\"服务器\">>>\"客户\":\'你好!这是我的数字证书\' + 公钥
step3:
“客户”收到“服务器”的证书后,验证数字证书是否是“服务器”的,如果是, “客户”会发送一个随机的字符串给“服务器”用私钥去加密:
\"客户\">>>\"服务器\":\" \'这是一个随机的字符串\' 我不能验证你是不是服务器,你先加密这个字符串试试 \"
服务器把用私钥加密的结果返回给“客户”:
\"服务器\": \'这是一个随机的字符串\' ==私钥加密==> \'01b6xbf46aqfe7r8p9l\'
\"服务器\">>>\"客户\":\'01b6xbf46aqfe7r8p9l\'
“客户”用公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是“服务器”。
\"客户\":\'01b6xbf46aqfe7r8p9l\' ==公钥解密==> \'这是一个随机的字符串\'
\"客户\">>>\"服务器\":\'验证成功,你确实是服务器!\'
step4:
验证“服务器”的身份后,“客户”生成一个 对称加密算法和密钥 ,用于后面的通信的加密和解密。这个对称加密算法和密钥,“客户”会用公钥加密后发送给“服务器”,只有“服务器”手中有可以解密的私钥。
证书颁发:(图左)
客户端校验服务端的数字证书的过程:(图右)