一、SSL/TSL
- SSL
- TLS的前身,由netscape开发的安全协议
- TLS
- 与具体的网络传输协议无关
- 既可以用于HTTP,也可以用于TCP
1.1 加密算法
1.1.1 对称加密
- 双方使用同一个密钥进行加解密;
- 加解密速度快,通常在消息发送方需要加密大量数据时使用;
问题:
- 在第一次与陌生人进行通信时,如何安全的传递密钥
1.1.2 非对称加密(公钥加密)
- 双方使用不同的密钥进行加解密;
- 公钥
- 公开给所有需要与自己通信的对象;
- 公钥加密的内容只能通过对应的私钥进行解密;
- 用于内容加密,由内容发送者持有
- 私钥
- 个人私密拥有;
- 私钥加密的内容,任何对应的公钥都能进行解密;
- 用于表征身份,即产生数字签名
- 数字签名
- 对消息内容进行哈希计算,得到hashcode,利用私钥对hashcode进行加密
- 可以标识身份,因为私钥唯一,公钥与私钥是一对,公钥能解密成功,证明消息的发送方一定是私钥的持有者
- 可以校验消息的一致性,消息和数字签名一同发送给接收方,如果消息被篡改,hashcode和数字签名中保存的hashcode不一样,数字签名中的hashcode无法修改,否则解密不会成功
- 数字签名
- 公钥
- 加解密速度慢;
- 公钥可以公开发布,不需要考虑密钥安全传递的问题
问题:
- 只使用一套公私钥,则只能实现公钥持有者(例如客户端)向私钥持有者(例如服务端)的单向信息加密,私钥持有者(例如服务端)向公钥持有者(例如客户端)发送的信息不安全;
- 虽然公钥可以公开发布,但在与陌生人第一次建立通信时,如何确认收到的公钥是对方发送的,而不是通信被截获之后伪造的。
1.2 数字证书
- 数字证书
- 将公钥与私钥持有者的身份信息进行绑定
- 内容包括:
- 证书的发布机构
- 证书的有效期
- 公钥
- 证书所有者
- 指纹算法
- hash算法等,将证书中的明文内容计算hash值
- 签名所使用的算法
- CA认证机构利用自身的私钥对hash值进行加密
- 指纹
- 指证书内容的hash值经过CA私钥加密后生成的内容
- CA(certification authority)
- 颁发数字证书的权威机构
1.2.1 确认公钥的身份的真实性
- 数字证书中包含公钥以及公钥发布者的身份信息,且加上了CA的数字签名
- 将公钥身份真实性的确认问题转化为
- CA公钥的真实性
- 内置在操作系统中,受信任的根证书颁发机构
- 数字证书内容的一致性,未经篡改
- 公钥身份真实性的确认问题
- 由CA认证机构完成,并对结果负有法律责任
- CA公钥的真实性
1.2.2 双向通信的安全性
- 通信内容采用对称加密
- 对称加密能实现双向加密,且加密速度快
- 对称加密中的密钥采用非对称加密方式传递
- 客户端使用公钥对对称加密中的密钥进行加密,传输给服务端
1.2.3 CA认证过程
- 服务提供者向CA认证机构注册,得到数字证书
- 服务提供者在建立第一次通信时将证书下发,客户端进行解密
- 利用操作系统内置的CA认证机构发布的公钥对证书进行解密得到证书内容的hash值
- 根据指纹算法将证书内容重新计算一遍hash值并进行比较,确定公钥的真实性
1.3 SSL/TSL通信过程
- client向server发送请求;
- server向client下发CA证书;
- client比较证书中所有者的信息与正在访问的服务提供者的信息是否一致,确认公钥的身份一致性;
- client校验证书是否为合法机构颁发,确认公钥的真实性;
- client生成一个随机值(对称密钥),然后用证书中的公钥对该对称密钥加密;
- server利用非对称私钥解密client发送的信息,从中得到对称密钥;
- 之后server和client就可以通过对称密钥进行信息交互。
1.4 IIS中生成自签名证书与SSL绑定
- 生成自签名证书
- SSL绑定