先说几个概念:
加密可以分为对称加密和非对称加密。两者的主要区别就是是否使用同一个秘钥,对称加密需要用同一个秘钥。
非对称加密不需要用同一个秘钥,而是需要两个秘钥:公开密钥(publickey)和私有密钥(privatekey),并且加密密钥和解密密钥是成对出现的。
前提:公钥加密(大家都知道),私钥解密(只有自己知道)
反之也是。
解决三个问题:
1.文件内容不能被读取(加密)
2.文件内容不能被篡改(数字签名)
3.文件内容不能被掉包(数字证书)
- 对端的公钥加密本端的对称秘钥,这个对称秘钥再去加密内容(有被篡改风险)
- 解决篡改风险:数字签名方法
利用摘要算法提取出文件的摘要并用本端私钥加密内容(数字签名),这个时候发送两份文件,也就是第一步1的加密内容和数字签名。(对端收到数据会把1的加密内容使用算法提取出摘要信息,在把摘要信息和数字签名里的摘要对比,一致,说明数据没有被篡改),但是又产生一个风险(对端乙无法确定自己的公钥是甲的,还是有被篡改风险) - 数字证书解决:
数字证书里一般会包含公钥、公钥拥有者名称、CA 的数字签名、有效期、授权中心名称、证书序列号等信息。
Ca数字签名:使用自己的私钥加密摘要,公钥开放,接收方提取出证书的摘要和数字签名的摘要对比,一致没有篡改
解释:对称加密算法使用秘钥加密数据,非对称加密算法对秘钥加密
数字签名:提取出数据的目录结构使用 摘要算法 进行加密,私钥在加密数据。最后使用公钥
1.四次握手
http的数据得到交给ssl创建加密通道,最后数据通过传输层TCP/UDP传输过去。
2.现在说ssl握手过程
1)client里面携带的hello报文里面携带随机数1和几个加密套件
2)server收到以后,选用client里面的一个加密套件,然后发送到client,里面有随机数2和选择的加密套件
3)server把自己的证书(参考文档开头的数字证书)发送给客户端,客户端认证通过才可以得到公钥,此时生成 随机数3(然后使用公钥加密随机数3)
4)server使用私钥解密出随机数3(这样两边都有随机数1,2,3)
两边使用这三个随机数生成秘钥,握手结束,此时确定好了秘钥,接着数据使用这个秘钥对称加密,最后把数据通过传输层发送