https之对称加密、非对称加密
1、对称加密
服务端把密钥发给客户端(通过明文传输),服务端将要发送的数据用密钥加密, 到客户端之后,客户端用服务端发过来的密钥解密加密密文。
问题
如何安全地把密钥发送给客户端。
2、各自两把钥匙
客户端有自己的私钥和服务端的公钥两把钥匙,服务端也有自己的私钥和客户都安的公钥两把钥匙。发送数据就用对方的公钥加密,接收数据就用自己的私钥解密。
3、对称加密+非对称加密
1、客户端发送自己的公钥给服务端。2、服务端用客户端的公钥加密对称密钥,然后发送给客户端。3、客户端用自己的私钥 解密,得到对称密钥。然后双方都有了对称密钥,用密钥进行密文传输。
存在一个问题:对应的公钥采用明文传输,接收方能否确认自己收到的公钥一定是对方的。
假设一个场景:1、S端发送公钥给C端,黑客把公钥截获。2、黑客把自己的公钥传给C端,C端用黑客的公钥进行加密对称密钥,发送给S端。3、黑客再次截获C端用自己的公钥加密的密文,用自己的私钥解开,得到对称密钥。4、黑客用S端的公钥加密对称密钥,发送给S端。
最后,黑客,S/C端都有了对称密钥。
非对称加密之所以不安全是因为接收方不知道公钥是否是对方的。
数字证书
数字证书=(数字签名)+(服务器个人信息+服务器公钥)
数字签名 = (服务器个人信息+服务器公钥)-->Hash算法=信息摘要-->CA的私钥
CA的公钥和私钥
发送发的公钥和私钥
客户端拿到数字证书,得到CA的公钥,CA的公钥可信,因为在网上公开,可以和其他的对比。用CA的公钥解开数字签名,得到信息摘要。
客户端用对应的hash算法hash出服务端信息的信息摘要。
对比两个信息摘要,如果一致,证明发送方法的公钥真实性。
CA的公钥和私钥保证对比信息摘要的真实性。
常用的对称加密算法:DES(Data Encryption Standar),非对称加密算法RSA,签名哈希算法MD5(SHA256)等等。