HTTP加密
文章目录
- 原理
- 方式
- 证书
原理
HTTP = HTTPS + TLS/SSL(数据的加密解密层)
HTTP是应用层的协议,当应用层向下访问的时候并不是直接访问到socket层,而是先通过TLS/SSL加密解密层后再进行后续工作。此时得到的协议就是HTTPS。
举个例子:如何防止一个文本中的内容被篡改?以及说识别到是否被篡改?
加密理论:
数据传输过程是以加密以后的形式传输的,即数据+数字签名。
一方接收到数据后:
方式
加密方式有两种:
-
对称加密
-
非对称加密
- 对称加密
密钥只有一个,用X表示。发送的数据用X加密,收到的时候也要用X来解密。
对于对称加密来说,密钥协商的方式是不合适的,因为第一次传输密钥的时候就可能会被知道密钥是什么。
- 非对称加密
有一对密钥:公钥和私钥。
用公钥加密,但是要用私钥解密;反过来用私钥加密,要用公钥解密。常见的非对称加密有RSA。
一般而言,公钥是全世界公开的,私钥是自己私有保存的。
- 方式一(错误)
server端先把公钥给到client端,然后client端利用这个公钥进行数据加密,再将其传输给server端。这种方式在公钥加密的数据被拦截后,依旧无法破解,因为只有server端拥有解密的私钥。
目前为止数据是安全的,但是当server端将数据发送回client端的时候,如果用私钥加密,此时的所有人都可以对其进行解密,这就显得徒劳无功了。
所以一对非对称公钥私钥是无法完成安全传输的。
- 方式二(错误)
既然一对不行就用两对,分别在通信前交换双方的公钥进行加密,在通信时也能分别用自己的私钥解密。
这听起来很好,但是也有两个弊端:首先这种方式也有被窃取数据的风险,其次非对称加密算法是很复杂的,这种方式会很消耗时间,效率低下。
因此我们都是采用对称+非对称相结合的方式。
- 方式三(正确)
协商阶段—非对称加密
数据传输阶段—对称加密
在通信前,server端将自己的公钥S给到client端,然后client端用这个公钥S给自己的私钥-C进行加密,传输给server端,这是非对称方式的通信。
此时双方就都知道了需要进行通信的密钥-C,那么就可以通过-C,以对称的方式进行通信。
这个过程是安全的,因为私钥-S仅在server端,所以不用担心第一次传输公钥S的时候会被破坏。
但是这是没有刻意攻击的前提下,如果有人刻意攻击,是可以将第一次传输公钥给拦截然后包装成它自己的,进而获取待会client发送来的私钥。
这里的本质问题是,client端不知道此时的公钥已经被做了手脚了。此时的解决方法就是证书。
证书
CA证书机构是一个服务商,经过权威认证,该机构就是合法的。
该机构拥有自己的公钥和私钥。
申请证书的过程:申请证书需要提供企业的基本信息、域名、公钥。
- 原理
CA机构利用自己的公钥将数据进行加密,利用私钥-A形成该机构的数字签名,此时只有公钥A才能解开该数字签名。
在上述提到的过程中,并不是直接将公钥发送到client,而是发送证书:
所以证书的构成就是:数据+该机构的数字签名。
这里几种情况:
- 攻击者想篡改整个证书
- 攻击者想篡改数据但不改数字签名
- 攻击者想篡改数字签名但不改数据
首先篡改整个证书是可行的,因为改CA机构的A公钥大家都有,但是这样的话就无法重新形成数字签名了,因为这个数字签名是CA机构自己用-A私钥生成的。也就是说,只有CA机构能够重新形成数字签名。那么此时的攻击者即使篡改了整个证书,也是无法获得client端的认可的。
其次最后两种情况都是不可能的,因为一旦数字签名和数据内容不一样,散列/解密以后一对比就会自动被识别出来。
这里有个前提,client端必须要知道CA机构的公钥,这基本上是内置的。
- 还有一个问题就是如果攻击者也是一个合法的机构,它将整个报文都给修改了,而使用自己的报文,该怎么办?
这其实也是不可能的,因为证书里面已经包含了目标域名,那么client端识别出来以后自然也就弃用了。
这也是有证书和无证书的很大差别,如果没有证书的话,client端并不会知道自己获得的公钥是否是自己想要的,但是有了证书以后就能通过域名知道是否合法。