前言
本文写https相关内容,持续补充
基础概念理解
- 对称加密
- 加解密秘钥是同一个
- 非对称加密
- 公钥, 私钥
- sa -> 公钥私钥都是两个数字
- ecc -> 椭圆曲线, 两个点
- 公钥加密, 私钥解密
- 数据传输的时候使用
- 私钥加密, 公钥解密
- 数字签名的时候使用
- 哈希函数
- md5/ sha1/sha2
- 得到散列值, 散列值是定长的
- 消息认证码
- 生成消息认证码: (将原始数据+共享秘钥) * 进行哈希运算 = 散列值
- 验证消息认证码:
- (接收的原始数据 + 共享秘钥) * 哈希运算 = 新的散列值
- 新散列值和旧散列值进行比较, 看是不是相同
- 作用:
- 验证数据的一致性型
- 弊端:
- 两端共享秘钥必须相同, 共享秘钥分发困难
- 所以后面不再使用消息认证码
- 数字签名(openssl库) -> 目的告诉所有人这个数据的所有者是xxx, xxx就是拿私钥的人
- 生成一个非对称加密的密钥对
- 公钥
- 私钥
- 生成签名:
- 对原始数据进行哈希运算 -> 散列值
- 使用非对称加密的私钥, 对散列值进行签名(私钥加密) -> 密文
- 得到的密文就是数字签名
- 签名的校验:
- 校验者会收到签名者发送的数据
- 原始数据
- 数字签名
- 对接收的数据进行哈希运算 -> 散列值
- 使用非对称加密的公钥, 对数字签名进行解密 -> 明文 == 签名者生成的散列值
- 校验者的散列值 和 签名者的散列值进行比较
- 相同 -> 校验成功了, 数据属于签名的人
- 失败 -> 数据不属于签名的人
- 弊端:
- 接收公钥的人没有办法校验公钥的所有者
- 证书
- 由一个受信赖的机构 (CA) 对某人的公钥进行数字签名
- CA有一个密钥对
- 使用ca的私钥对某个人的公钥进行加密 -> 证书
- 证书里有这个人 的公钥
- 证书里有这个人的个人信息
https传输过程
- 在百度服务器端首先生成一个秘钥对 -> 对公钥分发
- 百度将公钥给到了CA认证机构, ca对私钥进行签名 -> 生成了证书.
- 第一步第二部只做一次
- 客户端访问百度, 百度将ca生成的证书发送给客户端
- 浏览器对收到的证书进行认证
- 如果证书没有问题 -> 使用ca的公钥将服务器的公钥从证书中取出
- 我们得到了百度的公钥
- 在浏览器端生成一个随机数, 使用得到的公钥进行加密, 发送给服务器
- 服务器端使用私钥解密, 得到了随机数, 这个随机数就是对称加密的秘钥
- 现在秘钥分发已经完成, 后边的通信使用的的对称加密的方式