-
what
-
定义
-
Https = Http + SSL/TLS
-
-
-
why
- http问题
- 明文传输
- https优势
- 数据加密,防窃听
- 身份验证,防冒充
- 完整性校验,防篡改
- http问题
-
how
-
数据加密:https的对称加密和非对称加密
-
问题一:为什么同时使用对称加密和非对称加密
- 对称加密性能高,传输数据时采用对称加密
- 使用非对称加密,通过网络协商数据传输的密钥,确保传输安全
-
问题二:对称加密的密钥如何产生和传输
-
tls握手阶段
-
协商密钥sk
-
基于非对称加密算法
-
公开密钥密码学
- 一个公开密钥,一个私有密钥;一个用作加密,一个用作解密
- 使用其中一个密钥加密的密文,只能使用另一个密钥解密得到明文
- 由于加密和解密需要使用两个不同的密钥,所以称为非堆成加密
-
流程
- 客户端向服务端发送请求
- 服务端返回客户端自己的公钥puk
- 客户端生成本次对话的对称密钥sk,使用puk对sk进行加密得到sk_enc传给服务端
- 服务端收到sk_enc后用自己的私钥prk解密得到sk
- 接下来客户端和服务端使用sk加密后传输
-
-
基于专用密钥交换算法,如dh,ecdh
-
基于共享的secret,如psk,srp
- 客户端和服务段预设对称加密密钥,握手阶段传递钥匙id
-
-
-
数据通信阶段
- 使用密钥sk对通信内容进行对称加密
- 使用密钥sk解密数据
-
-
问题三:https有几套非对称加密
- 2套非对称加密
- 第一套用于协商加密密钥sk(详见问题二)
- 公私钥由服务端生成(双向认证则客户端也需要生成公私钥)
- 第二套用于数字签名加密
- ca机构生成公私钥,私钥由ca机构持有
- 第一套用于协商加密密钥sk(详见问题二)
- 2套非对称加密
-
-
身份验证:https的证书
-
what
- 数字证书 = 主体信息 + 数字签名
- 主体必要信息
- 版本
- 序列号
- 签名算法
- 颁发者
- 有效期
- 使用者
- 公钥信息
- 主体拓展信息
- 密钥标识符
- 证书策略
- 数字签名
-
why
- 中间人攻击
- what
- 中间人在客户端和服务端不知情的情况下,窃听甚至篡改通信信息
- how
- 一端向另一端发送请求,对端返回自己的公钥
- 中间人截获了对端的公钥,替换成自己的公钥
- 一端收到公钥,并未验证对方的身份,直接协商对称加密的密钥sk
- 中间人拿到sk,信息泄漏
- what
- 防止数字证书被篡改——ca生成数字签名作为防伪标识
- 中间人攻击
-
how
-
申请证书
-
用户向ca提交自己的信息和公钥
-
对原文做哈希,把不定长的文本映射成固定长度的字符空间
-
使用ca的私钥对定长字符做加密
-
-
验证证书
- 使用相同的哈希算法,对除签名意外的部分做一次哈希,得到文本的哈希映射,记为h1
- 获取ca机构的公钥对数字签名解码,得到ca机构算出的哈希映射,记为h2
- 对比h1和h2是否相等
- 再进行身份验证,验证域名
- 验证通过,拿到对端的公钥
-
获取ca机构的公钥
-
操作系统和浏览器会预先放置一些根证书
-
根证书
- 没有上层机构作为数字签名
- 证书上的公钥为ca机构颁发的公钥
-
证书信任链
-
证书类型:根证书,中介证书,用户证书
-
搜索根证书
-
从用户证书开始
-
递归寻找证书
-
若证书的isser值等于subject值则为根证书,结束返回该证书
-
-
-
-
不同后缀名的证书
- 证书标准
- x.509国际标准
- 证书编码格式
- pem
- 以文本格式存储
- 以begin xxx开头,end xxx结尾
- 中间是base64编码数据
- 用于存储公钥,私钥,证书签名等数据
- 查看证书:openssl x509 -in xxx.pem -text -noout
- pem转der: openssl x509 -in xxx.pem -outform der -out xxx.der
- der
- 以二进制存储,无法直接预览
- 查看证书: html openssl x509 -in xxx.der -inform der -text -noout
- der转pem: openssl x509 -in xxx.der -inform der -outform pem -out xxx.pem
- pem
- 文件拓展名
- 证书:存放数字证书 .crt .cer
- 密钥:存放公钥或私钥 .key
- 证书+密钥:同时存放证书和公钥 .pem .der .p12
- 证书请求:证书签名请求 .csr
- 证书标准
-
-
-
完整性校验
- 数据通信阶段,对原始信息做一次哈希,得到message的摘要,称为信息摘要h1
- 对端使用协商出来的sk解密数据包,做一次相同的哈希算法得到信息摘要h2
- 对比h1和h2,判断通信数据是否被篡改
-
https流程
-