1. 证书
1.1 证书的应用场景
1.2 证书规范和格式 -- x509
1.3 CA证书
-
证书的获取和身份的认证
-
客户端如何验证CA证书是可信任的?
-
有哪些CA机构?
1.4 公钥基础设施 - PKI
- PKI组成的要素
- 用户
- 申请证书的人 -> web服务器端
- 申请证书
- 生成密钥对 , 或者委托ca生成
- 将公钥发送给CA
- ca使用自己的私钥对得到公钥签名
- 将证书发送给用户
- 发送证书
- 当客户端访问服务器的时候发送证书给客户端
- 注销证书
- 当发现私钥泄露之后
- 申请证书
- 使用证书的人 -> 客户端
- 接收证书
- 验证对方的身份信息
- 申请证书的人 -> web服务器端
- CA认证机构
- 可以生产密钥对(可选)
- 对公钥签名
- 吊销证书
- 仓库
- 存储证书 -> 公钥
- 用户
2. SSL/TLS
-
描述的是客户端和服务器刚建立连接之后做的事情
第一次
- 客户端连接服务器
- 客户端使用的ssl版本, 客户端支持的加密算法
- 服务器
- 先将自己支持ssl版本和客户端的支持的版本比较
- 支持的不一样, 连接断开
- 支持的一样, 继续
- 根据得到的客户端支持 的加密算法, 找一个服务器端也同样支持算法, 发送给客户端
- 需要发送服务器的证书给客户端
- 先将自己支持ssl版本和客户端的支持的版本比较
第二次:
客户端:
- 接收服务器的证书
- 校验证书的信息
- 校验证书的签发机构
- 证书的有效期
- 证书中支持 的域名和访问的域名是否一致
- 校验有问题, 浏览器会给提示
- 客户端连接服务器
3. https -> 单向认证
- 服务器要准备的
- 生成密钥对
- 将公钥发送给ca, 由ca签发证书
- 将ca签发的证书和非对称加密的私钥部署到当前的web服务器
- 通信流程
- 客户端连接服务器, 通过一个域名
- 域名和IP地址的关系
- 域名要绑定IP地址
- 一个域名只能绑定一个IP地址
- IP地址需要被域名绑定
- 一个IP地址可以被多个域名绑定
- 域名要绑定IP地址
- 客户端访问的域名会别解析成IP地址, 通过IP地址访问web服务器
- 域名和IP地址的关系
- 服务器收到了客户端的请求
- 服务器将CA签发的证书发送给浏览器(客户端)
- 客户端拿到了服务器的公钥证书
- 读这个公钥 证书
- 验证域名
- 有效期
- ca签发机构
- 服务器的公钥
- 读这个公钥 证书
- 客户会生成一个随机数 (作为对称加密的秘钥来使用的)
- 使用服务器的公钥就这个随机数进行加密
- 将这个加密之后 秘钥发送给服务器
- 服务器对收到的密文解密
- 使用服务器的是要解密, 得到对称加密的秘钥
- 数据的传输
- 使用对称加密的方式对数据进行加密
- 客户端连接服务器, 通过一个域名
4. 自签名证书
-
使用openssl生成自签名证书
创建一个目录如Mytest, 进入该目录, 在该目录下打开命令行窗口
-
启动openssl
openssl # 执行该命令即可
-
使用openssl工具生成一个RSA私钥, 注意:生成私钥,需要提供一个至少4位的密码。
genrsa -des3 -out server.key 2048 - des3: 使用3des对私钥进行加密
-
生成CSR(证书签名请求)
req -new -key server.key -out server.csr
-
删除私钥中的密码, 第一步给私钥文件设置密码是必须要做的, 如果不想要可以删掉
rsa -in server.key -out server.key -out 参数后的文件名可以随意起
-
生成自签名证书
x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
复习
-
消息认证码
- 是什么?
- 散列值
- 能干什么?
- 保证数据的完整性, 一致性
- 怎么生成?
- 准备的条件: Hmac
- 原始数据
- 共享秘钥 -> 认证的另一方需要有同样的秘钥
- 哈希算法
- 准备的条件: Hmac
- 弊端:
- 秘钥分发困难
- 使用非对称加密
- 不能第三方认证
- 不能防止否认
- 秘钥分发困难
- 是什么?
-
数字签名
-
是什么?
- 签名
- 签名的人生成非对称加密的密钥对
- 签名的人将公钥进行分发
- 签名的人将原始数据进行哈希运算 -> 散列值
- 签名的人使用自己的私钥对散列值进行非对称加密 -> 最终得到的数据就是签名
- 校验:
- 接收签名人的公钥
- 接收签名人发送的数据和签名数据
- 对原始数据进行哈希运算 -> 散列值
- 使用公钥对签名数据解密
- 将解密出的数据和散列值进行比较
- 相等 == 成功
- 不.. == 失败
- 签名
-
干什么?
- 保证数据的一致性
- 进行第三方认证
- 可以防止否认
-
能解决消息认证的弊端吗?
- 可以
-
怎么进行签名
RSA
-
椭圆曲线签名 -> ecdsa
数字签名的缺陷?
- 验证签名的一方没有办法判断得到的公钥到底属于谁
-