Http加密过程是怎样的
让第三方CA来确保server公钥正确
1)server向CA提供基本信息、公钥等,CA用CA私钥对server公钥和信息进行加密形成数字证书(防止server被伪造)。
2)client向server发出https请求和随机数c,server返回数字证书和随机数s。
3)client收到数字证书,用CA公钥对数字证书进行解密,得到server的公钥。
得到server公钥后,client可以用server公钥解密server签名得到摘要。
client也把原文hash一遍得到的摘要比对,确认内容没有经过更改
生成会话密钥
client用server公钥加密client生成的随机数premaster secret,发送给server。
server收到加密的随机数premaster secret,用server私钥解密随机数,然后和随机数c、随机数s一起生成会话密钥。此时client也拥有三个随机数生成相同的会话密钥(Session Key)。双方用会话密钥进行加密通信(防止内容被窃听进行加密)
用会话密钥(Session Key)进行加密通信是对称加密的。如DES,AES等对称加密,只有一把钥匙
而获得会话密钥的过程是不对称加密的。最常见的非对称加密是RSA,有公钥和私钥,公钥加密只有私钥解密,私钥加密只有对应公钥解密
如何防止数据被篡改
- 数字签名是server对通信内容进行hash,得到信息摘要。
- 然后用server私钥对摘要进行加密得到数字签名。server把明文连同数字签名一起发送给client
- client用server公钥对数字签名解密得到信息摘要,然后用相同的hash对数据进行计算得到信息摘要,比对两个信息摘要是否一致。