http 超文本传输协议
存在问题:
-
安全性、隐私性、数据完整性
-
易被中间人(黑客之类的)对数据进行劫持、篡改、隐私泄露
引出了=====================================================================
https (source)
- http 在网络模型中的应用层
Application => transport => internet => network Access - 所有经由网络中的数据都是 以 最原始状态传输的,一旦被截获,内容会被轻易获取
https中引入了 =====================================================================
TLS协议
的概念=====================================================================
- 专门对数据进行加密解密操作
- 客户端产生数据后,会通过TLS进行数据加密,传到对端,通过TLS对数据进行解密
- 将解密后的 数据传输给http服务的
—网络中 传输的 是加密后的数据
TLS 和 SSL 对比
- TLS(transport layer security):使用广泛的网络传输加密协议,规定了如何为在网络中传输的数据进行加密和解密,确保数据安全性
- SSL(Secure Socket Layer) ===> SSL.3.0版本 共享给IETF组织,最终重命名为TLS
- SSL 为 TLS 前身
对称加密
TLS 采用哪种方式对数据进行加密解密的
对称加密
- 指通讯双方更具协商好的算法,生成一个唯一密钥
- 该密钥用于同时对数据进行加解密操作
大致流程
- 访问某个服务时(已经三次握手了),会先向服务端发送个 hello请求,请求中包含了客户端所支持的 TSL版本 和加密函数 和 加密算法等信息
- 服务器接收请求,选取最优TSL协议、加密函数、加密算法,返回给客户端
- 客户端接收到响应后,先随机生成一段字符串(预主密钥),通过使用加密的函数和算法生成一组密钥(会话密钥)
- 同时客户端把生成的 预主密钥 发送给服务端,并且告知生成对称密钥的算法和信息。
- 服务端通过使用客户端发送过来的 加密的函数和算法生成一组密钥(会话密钥)
名词
预主密钥: 客户端随机生成的一段字符串
会话密钥(对称密钥): 预主密钥 结合服务端返回的TLS协议、加密函数、加密算法 生成
问题
- 无法保证 预主密钥安全传输给服务端
- 中间人也能拿到客户端发送过来的 预主密钥 和 TLS协议、加密算法、函数等信息,生成对应的 会话密钥
怎么解决 预主密钥安全传输===================================================
引入了=====================================================================
非对称加密(PKI)
- 公钥: 用于加密,对外开发,所有人都能获取
- 私钥: 用于解密,只有拥有者知道
public key infrastructure
示例
- 客户端 向服务传输数据时, 服务端首先会生成 公钥私钥对
- 服务器将公钥发送给客户端,还有合适的TLS 协议, 加密算法等信息
- 客户端随机生成一串字符串(预主密钥),预主密钥通过 加密算法生成 对应的 会话密钥
- 客户端使用服务器发送的公钥 对 预主密钥进行加密。并且发送给服务端。还有 TLS 、加密算法等信息。
- 服务端通过自己的私钥对 加密过的预主密钥进行解密。得到正确的预主密钥,通过加密算法得到 会话密钥。
问题
- 无法保证客户端获取的公钥真的是 目标服务提供的。
- 客户端获取到公钥真的是目标服务所颁发的吗?
举例
- 服务器的公钥、密钥对被中间人截取。中间人提供自己的公钥私钥对给客户端。客户端不知道
- 客户端随机生成 预主密钥,使用 中间人提供的公钥进行加密;使用中间人提供的加密算法生成 会话密钥
- 中间人拿到客户端发来的加密后的预主密钥,用自己的私钥进行解密,拿到了正确的 预主密钥。
- 中间人用预主密钥生成对应的会话密钥(中间人和客户端之间的)
- 中间人用服务器的公钥对 预主密钥进行加密;用服务器提供的加密算法生成会话密钥(中间人和服务器之间的)
- 服务器拿到中间人提供的加密后的预主密钥,用自己的私钥进行解密拿到 预主密钥;进行会话密钥生成。
- 这样中间人就能对两边通讯内容继续截取、监听了
为解决这问题=================================================================
引入了=====================================================================
证书CSR
-Digital Certification 证书颁发机构(CA)所签发
- 唯一,表示一个站点的身份信息;网站的身份证
- 证书:内容包含–证书的申请者、证书的颁发机构、证书的有效起始结束信息、证书的指纹(公钥)
证书的申请流程
- 向CA机构进行申请,—签发签证。
网站申请证书时
- 申请者需要创建一个证书申请请求文件(SCR)Certificate Signing Request
- 申请证书中通常要包含:网站域名、IP地址、公司名称、地理位置、邮箱地址、公钥信息等信息
- 发送给 CA,ca对信息审核,审核完成后颁发给申请者,申请者把证书部署在web服务即可
证书的工作原理
1. 证书指纹:
- 用户唯一表示证书(确保证书的完整性)
-
hash 加密: 单项加密算法
- 特性:不可逆、唯一性
生成证书时,会对证书的内容和公钥分别进行hash计算,作为证书指纹附加到证书中,同时说明使用的hash算法
- 浏览器从服务端获取到证书后会使用相同的算法对证书进行hash 算法。将计算后的结果与附加在证书的中的指纹做对比
- 如果一致,证明证书在网络传输过程中没有被人所截获并篡改内容
- 实现对证书正确性的核实(但无法保证证书是合法机构颁发的。也可能是一些伪造证书)
问题
- 还需要核实证书的真实性,确定证书真是由证书中所描述的CA所颁发的,而不是伪造的。
通过证书签名实现=====================================================================
2. 数字签名(验证证书的真实性)
-
通过 KPI(非对称加密)来进行加密和解密进行验证证书的真伪
-
CA使用私钥进行加密,公钥进行解密
-
CA生成好证书后,会对证书进行 私钥加密,并附加到证书中发送给服务器
-
客户端网站获取到证书后。会使用 CA对应的公钥 对其进行解密,一但解密成功。就代表 证书确实是CA机构颁发的
问题
浏览器CA的公钥在那儿呢,怎么安全获取CA公钥呢,如何保证公钥不被中间人替换
就要知道=============================================================
预安装
-
机构对证书进行签名时,不仅用到私钥,还会用到另外一个证书-根证书
- 作用;为其他证书进行签名,每个操作系统都会维护一个根证书库:默认浏览器已经安装好了受信人的CA根证书
-
验证证书中的数字签名时,只要找到对应的CA根证书即可(避免网络传输时被窃听,掉包的风险)
=============
大概流程
- 客户端请求时(三次握手后),发送hello 请求,携带 支持的TLS、加密算法
- 服务端响应 服务端采用的 TLS协议, 解密算法;同时发送 证书给客户端
- 客户端验证证书指纹、签名确定证书的真实性。
- 客户端通过CA提供的公钥从证书中提起出服务器的公钥(保证公钥一定是目标服务器的)
- 客户端生成预主密钥,使用 公钥进行加密,发送给服务器,携带加密算法等信息;预主密钥使用加密算法生成 会话密钥
- 服务器使用自己的私钥 对 加密的预主密钥解密,拿到正确的预主密钥;使用加密算法生成 对应的会话密钥。
- 开始真正传输数据,并且这些数据进行会话密钥加密。
1-6之间的过程(不包括三次握手) 俗称为 TLS握手。