HTTPS的加密方式

46次阅读

共计 2662 个字符,预计需要花费 7 分钟才能阅读完成。

一、概述

1.1 大致目的

  • 进一步了解 HTTP 和 HTTPS
  • 了解对称加密和非对称加密的工作方式
  • 对 HTTPS 的加密有一个大概的了解
  • 对证书有一个初步的了解

1.2 加密方式

在学习 HTTPS 加密方式之前,有必要了解几种常见的加密方式,如:

  • 对称加密
  • 非对称加密

二、对称加密

2.1 定义

需要对加密和解密使用相同密钥的加密算法。所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
注意:对称加密也叫密钥加密

2.2 密钥的形式

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

2.3 优缺点

优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
缺点:对称加密,密钥管理的安全性很低,因为加密和解密都使用同一个密钥,在密钥的发送过程中,密钥可能被第三方截取,导致第三方也可以破解密文。

2.4 具体实现

在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。

2.5 图解

我们以客户端发送请求给服务器为例:

对称加密在第一部和第二部上均可被第三者拦截(实时是第二步一般均可以被拦截,但是能否解密还是要看第一步是否把密钥拦截下来)
因为,对称加密的解密钥匙和加密钥匙均是同一把。

三、非对称加密

3.1 定义

非对称加密算法需要两个密钥:公开密钥(publickey: 简称公钥)和私有密钥(privatekey: 简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

3.2 密钥的形式

公钥与私钥是一对。传输双方均有自己的一对密钥(也就是双方每方均有:公、私密钥一把,双方加起来共 4 把)

例子: 传输双方比如是甲乙双方,甲方有配对的公、私密钥一对,且公钥负责加密,私钥负责解对应的公钥加的密。乙方同理。

3.3 优缺点

非对称密钥的算法强度复杂(是优点也是缺点),安全性依赖于算法与密钥。
优点:安全性较高,比对称密钥安全性高很多。非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
缺点:由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

3.4 具体实现

1. 客户端要向服务器发送信息,客户端和服务器都要产生一对用于加密和解密的公钥和私钥。
2. 客户端的私钥保密,客户端的公钥告诉服务器;服务器的私钥保密,服务器的公钥告诉客户端。
3. 客户端要给服务器发送信息时,客户端用服务器的公钥加密信息,因为服务器的公钥是公开的,客户端可以得到。
4. 客户端将这个消息发给服务器(已经用服务器的公钥加密消息)。
5. 服务器收到这个消息后,服务器用自己的私钥解密客户端的消息。其他所有收到这个报文的人都无法解密,因为只有服务器才有服务器的私钥。

3.5 图解

四、HTTPS 采用的加密

HTTPS 采用的是处理信息的方式是:结合对称加密 + 非对称加密这两种方式,我们可以用非对称加密的方式来传输对称加密过程中的密钥,之后我们就可以采取对称加密的方式来传输数据了。具体是这样子的:

服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥之后,会生成一把密钥 (对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。

五、证书

5.1 非对称加密的不足

事实上,在没有引入证书之前,非对称加密也并非传输安全的,在此举个例子:

服务器以明文的方式给客户端传输公钥的时候,中间人截取了这把属于服务器的公钥,并且把中间人自己的公钥冒充服务器的公钥传输给了客户端。

之后客户端就会用中间人的公钥来加密自己生成的密钥。然后把被加密的密钥传输给服务器,这个时候中间人又把密钥给截取了,中间人用自己的私钥对这把被加密的密钥进行解密,解密后中间人就可以获得这把密钥了。

最后中间人再对这把密钥用刚才服务器的公钥进行加密,再发给服务器。

毫无疑问,在这个过程中,中间人获取了对称加密中的密钥,在之后服务器和客户端的对称加密传输中,这些加密的数据对中间人来说,和明文没啥区别。

5.2 证书的引入

非对称性加密之所以不安全,是应为客户端不知道,这把公钥是不是服务器的。因此,我们需要找到一种策略来证明这把公钥就是服务器的,而不是别人冒充的。解决这个问题的方式就是使用数字证书,具体是这样的:

1、我们需要找到一个第三方机构,它是一个拥有公信力、大家都认可的认证中心,那就是数字证书认证机构 (简称 CA)。
2、服务器在给客户端传输公钥的过程中,会把公钥以及服务器的个人信息通过 Hash 算法生成信息摘要。为了防止信息摘要被人调换,客户端还会用 CA 提供的私钥对信息摘要进行加密来形成数字签名。并且,最后还会把原来没 Hash 算法之前的个人信息以及公钥和数字签名合并在一起,形成数字证书。
3、当客户端拿到这份数字证书之后,就会用 CA 提供的公钥来对数字证书里面的数字签名进行解密来得到信息摘要,然后对数字证书里服务器的公钥以及个人信息进行 Hash 得到另外一份信息摘要。最后把两份信息摘要进行对比,如果一样,则证明这个人是服务器,否则就不是。这样,就可以保证服务器的公钥安全着交给客户端了。

5.3 浏览器内置常用证书

一个重要的问题是,如何安全转交认证机构的公钥是一件很困难的事,因此,大多数浏览器开发商发布版本时,会事先植入常用认证机关的公钥。
我们可以 Google Chrome 为例:
打开浏览器的设置选项,选择高级,可以看到隐私设置和安全性下面的一些设置,其中管理证书就可以看到谷歌浏览器一些内置证书,如图:

5.4 图解

下图选自图解 HTTP:

5.5 分析实例

我们分析下下面的三种情况

1、网站是 http 协议的:

可以看到是不安全的。
2、网站是完全的 HTTPS 加密的:

可以看到 Google 网站的 HTTPS 前面是有一把小锁的,这表示,这个网站的连接是安全的,并且点击小锁可以看到证书信息。
3、网站前带 HTTPS 但是不是完全安全的:

注意第三点和第一点的表达:连接不安全和连接并非完全安全这是因为:站点还有 http 资源,需要把所有链接换成 https 才可以带锁。


参考资料:

  • 图解 HTTP
  • 百度百科
  • http 加密那点事
正文完
 0