您现在的位置是:首页 >技术交流 >HTTP加密网站首页技术交流
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端并不会知道自己获得的公钥是否是自己想要的,但是有了证书以后就能通过域名知道是否合法。
下面是有证书的情况下的加密过程(内容来自博主:牛客网):
-
客户端发起 HTTPS 请求:当客户端(如 Web 浏览器)向服务器发起 HTTPS 请求时,会先向服务器请求其公钥。
-
服务器发送公钥:服务器收到请求后,将发送一个包含其公钥和数字证书的响应给客户端。数字证书由可信的第三方证书颁发机构(CA)颁发,用于证明服务器的身份。
-
客户端验证证书:客户端收到响应后,首先会验证数字证书的有效性。客户端会检查证书的颁发者是否是可信的 CA,并验证证书是否过期。如果证书有效,客户端会信任服务器的公钥。
-
生成会话密钥:客户端生成一个随机的对称密钥,称为会话密钥。这个密钥将用于后续的数据传输过程中的对称加密和解密。
-
加密会话密钥:客户端使用服务器提供的公钥对会话密钥进行非对称加密。由于只有服务器持有与公钥匹配的私钥,因此只有服务器能够解密这个加密后的会话密钥。
-
发送加密后的会话密钥:客户端将加密后的会话密钥发送给服务器。
-
服务器解密会话密钥:服务器使用其私钥解密收到的加密会话密钥。这样,服务器和客户端现在都有了相同的会话密钥。
从此刻起,客户端和服务器将使用这个对称会话密钥对后续的通信数据进行加密和解密。虽然非对称加密在此过程中只用于传输会话密钥,但它确保了会话密钥的安全传输,从而保护了整个 HTTPS 通信过程中的数据安全。