HTTPS握手方法
加密
加密的大致种类:
- 不可逆加密。 比如 MD5、SHA、HMAC
小明将文件加密得到一串密码a,并把文件和密码a给小红,小红拿到文件之后使用同样的算法得到密码b,这样小红就可以直接对比密码a和密码b是否一致确认文件在传输过程中是否被串改。
- 可逆加密
1) 对称加密。比如:AES、DES、3DES、IDEA、RC4、RC5、RC6
用同一个密码加密和解密
2) 非对称加密(就是公私钥)。比如:RSA、DSA、ECC
和对称加密相反不使用同一秘钥。1. 加密(保证数据安全性)使用公钥加密,需使用私钥解密。 2.认证(用于身份判断)使用私钥签名,需使用公钥验证签名。
证书
CA(Certificate Authority)机构颁发的证书(公证人)
去CA机构申请证书需要的大致信息?
1) 网站域名
2) 证书持有者
3) 证书有效期
4) 证书颁发机构
5) 服务器公钥(最主要,浏览器需要公钥加密通信使用的秘钥)
6) 签名时用的hash算法
签名
什么是数字签名?签名的过程是什么
1) CA机构拥有非对称加密的私钥和公钥
2) CA对证书明文信息进行hash
3) 对hash后的值用私钥加密,得到数字签名
浏览器收到服务下发的证书之后,拿到证书明文和签名,怎么验证是否篡改了呢?
1) 浏览器拿到证书里面明文的hash算法并对明文内容进行hash运算,得到A
2) 用CA的公钥解密签名得到B
3) 比较A 和 B,如果相等,说明没有被篡改,否则浏览器提示证书不可信
这里注意的是CA机构使用私钥签名,浏览器一般内置CA机构的公钥,公钥验签。
握手流程
HTTPS通过非对称加密交换通信秘钥,数据通信加密则是使用了对称加密,秘钥既刚刚交换的秘钥。为了保证在交换秘钥C过程中不被篡改,需要一个公证人来送来一把秘钥(服务端的公钥A)对C进行加密,公证人既为CA机构颁发的证书,服务器使用CA证书明文和服务端公钥A经过hash算法得到hash串,使用CA私钥B加密hash串得到数字签名。当客户端拿到如上信息后先使用CA机构的公钥B(内置)验签。确认无误后使用公钥A加密对称加密使用的秘钥C给服务器,服务器使用自己的私钥A解密得到秘钥C,之后就可以使用C加密数据后进行通信了。
这里有个小插曲,使用的秘钥C可能不是直接送过来的,而是握手过程中客户端先成一个随机数C,然后服务端生成随机数S,交换完成只有客户端使用pre-master、随机数C、随机数S生成一个秘钥,而在上面的交换秘钥过程中,交换的是pre-master,服务端得到之后,再通过随机数C,随机数S,pre-master计算得到真正通信使用的秘钥。
参考:
https://zhuanlan.zhihu.com/p/344086342
https://juejin.cn/post/6845166890675863559
https://juejin.cn/post/6847902219745181709