前言
前面的文章,我们着重介绍了http协议相关的知识。
http存在着安全问题(如运营商劫持),针对http的安全问题,我们引入了https进行解决。
下面,将详细介绍https协议
目录
一.https协议是什么
https也是一个应用层协议,是在http协议的基础上引入了一个加密层。
当今https协议在互联网中是非常普遍的。
因http协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些数据被篡改的情况
就比如臭名昭著的运营商劫持
什么是运营商劫持??
运营商劫持是指互联网服务提供商或移动通信运营商在用户访问特定网站或服务时,通过技术手段重定向用户的流量,导致用户访问到的不是他们原本想要访问的内容。
举个栗子:
我去下载天天动听播放器,这是正常情况下的,会弹出该软件的下载地址
可如果被劫持了的话,则是
下载的是QQ浏览器,对我们用户来说,属于是一种欺诈,因为我们想下载的与实际下载的不符合,对于厂商来说,则是妥妥的抢劫(抢流量)。
这是大概的流程。
即使运营商不劫持,也可能被黑客给劫持。
为解决此问题,除了从法律角度解决,也应从技术手段解决,我们需将http传输的明文加密成密文进行传输。
二.https工作流程
在计算机密码学中,有以下几个核心的概念
- 明文:传输的原始数据
- 密文:把明文进行加密之后得到一个让别人不能理解的数据
- 加密:明文—>密文
- 解密:密文—>明文
- 密钥:进行加密/解密的重要数据(辅助工具)
1.对称加密与非对称加密
对称加密:
加密还是解密,使用同一个密钥
非对称加密:
使用一对密钥进行加密/解密。
即使用其中的一个密钥加密,就使用另一个密钥解密
这两个密钥一般一个公开出来,一个私藏起来。
公开的叫公钥,私藏的叫私钥
2.https工作的基本流程
前文提到,在进行通信时,如果进行明文传输,很容易被黑客截获/篡改信息
1)引入对称加密
针对传输的数据进行对称加密
这样看起来,传输的数据进行了加密,好像已经安全了。
但事实并非如此。
在客户端和服务器交互的过程中,一个服务器对应着多个客户端,多个客户端使用着不同的密钥。
因此,我们要让每个客户端连上服务器的时候生成一个随机的密钥
服务器也得拿到这个密钥才能解密。
上述传输看似密文传输,但密钥进行明文传输给服务器时,黑客也会劫持获得密钥,后续的加密也形同虚设。
那如果再对密钥传输进行加密,能行吗??
也不行,因为你也需要传输密钥加密的密钥,等于无限套娃,黑客终将能获取的传输的数据。
2)引入非对称加密
针对上述问题,我们需引入非对称加密进行解决。
通过非对称加密,对需要传输的密钥进行加密
业务数据还是使用对称加密(非对称加密开销大,影响性能)
非对称加密并不是取代对称加密,而是辅助对称加密
非对称加密就涉及到了公钥和私钥
非对称加密中,只要把私钥保护好,公钥可以随便公开。
这样一来,看似问题得到了解决,但也存在着严重缺陷。
3)中间人攻击
简单来说,因为客户端和服务器不清楚当前的公钥是伪造的,黑客入侵的网络设备在客户端前假扮服务器,在服务器前假扮客户端。
具体流程如下:
首先,客户端向服务器发送请求,想要获取服务的公钥pub1
服务器收到到请求后,向服务器响应,但响应被黑客劫持,且黑客将自己生成的公钥pub2返回给客户端。
客户端无法分辨这个公钥是不是黑客伪造的,只能选择相信
于是,客户端基于pub2对对称密钥进行加密传输给服务器,黑客基于私钥pri2对公钥进行解密,得到对称密钥。
然后,黑客再基于pub1对对称密钥进行加密,发送给服务器,这样,后续传输的业务数据,在黑客眼中就一览无余了。
上述就是中间人攻击,这个问题在于客户端和服务器不能分辨出公钥是否为黑客伪造的。
但如果能让服务器和客户端分辨出来,那问题也就能得到解决。
4)证书机制
此处需引入第三方公正机构。
如果想要搭建服务器,使用https时,就需要在公证机构这里申请证书。
这个证书可以理解成一个结构化的字符串,里面包含着一些信息
如:证书发布机构,证书有效期,公钥,证书所有者,数字签名(合法性的关键要点).......
后续客户端从服务器拿公钥,就不只是拿公钥,而是拿整个证书,此时客户端就可以凭借证书中的数字签名,对证书合法性进行验证(校验和+加密)
客户端如何验证数字签名???
1.客户端把整个证书的各种字段,再算一次校验和,得到checksum1
2.客户端再使用公正机构的公钥,对数字签名进行解密,得到checksum2
3.对比checksum1和checksum2是否相等,如果相等,则是合法证书,若是不相等,意味着证书的内容被篡改过,此时浏览器会弹出警告页面提示用户该网站不安全
通过证书机制,客户端可分辨出公钥是否为黑客伪造。
以上便是https的全部内容,如有不对,欢迎指正
标签:加密,Javaee,黑客,密钥,https,服务器,原理,客户端 From: https://blog.csdn.net/yc_xym/article/details/143464182