首先从直接走http协议来看。我们直接看登陆流程,用户提交post请求向后端发送username password这个可能是明文传输,也可能经过base64等等操作,后端验证登陆成功后生成一个token,这个token可能是通过aes或者rsa或者hs512等等加密算法生成,同时这个token可能包含了userid过期时间等等,如果是通过hs512这种算法,后端通过一个key就可以完成加密,如果是rsa这种非对称加密,需要用产生的公钥进行加密。然后发送给客户端,客户端每次发送请求都会携带token来作为身份检验的依据,一般是放在http请求头cookie中。
那么问题来了,这种方式如果客户端被中间人攻击了(arp欺骗等等),或者通过xss、csrf等攻击方式让黑客拿到了这个token,这样将会变得非常不安全。由此我们想到了能不能用rsa来加密这个传输内容,每次客户端发送请求都用公钥来进行加密,黑客不知道私钥就不能拿到客户端加密的数据,只有服务端拥有私钥才能解密数据。 但是问题又来了,怎么保证客户端拿到的公钥一定是真的呢,黑客可以自己生成公私钥对,伪造服务器发送一个自己的公钥给客户端,客户端傻傻的拿着这个黑客的公钥加密数据,然后被黑客用他的私钥解密。
那怎么保证这个用户拿到的公钥一定是没被修改过的呢,这就需要一个"公证处",也就是ca机构,自己数字签名这个玩意。
具体过程可以好好看看附带的这张图
整个过程如下,说白了就是怎么保证服务器的公钥能够安全到达客户端,因此需要CA公私密钥颁发机构,这些机构颁发的公私密钥才是安全的
https://blog.csdn.net/oZhuZhiYuan/article/details/106650944
但是为什么不能自己去签发CA,因为自己签发的不安全,在用户通过浏览器浏览的时候会自动下载该网站对应的证书的,
https://blog.csdn.net/DeepHugY/article/details/103522033
如果这个证书不是一些有google 火狐微软等机构认证的证书
会显示不安全,也非常容易遭受ssl中间人攻击也就是黑客也自己签发CA证书,然后用户浏览网页的时候发送的下载证书请求下的是黑客自己签发的CA证书。这样他就有CA私钥进行解密。
https://www.trustauth.cn/wiki/5823.html
https://www.huaweicloud.com/zhishi/dyl108.html
tls/ssl是加密传输层传输内容的协议,http协议是基于tcp协议设计的 (图片来自其他一篇文章忘记从哪里来的了…)
有哪些写的不对的忘指正!
|