理解Https协议

2018-08-31  本文已影响0人  鸡哥cy

    都知道HTTP协议,那HTTPS又是干什么的呢?

    HTTPS协议称为超文本传输安全协议,利用SSL/TLS来加密数据包,由HTTP进行通信的一种协议。

    正是由于HTTP的不安全,才出现的HTTPS,了解这个协议只需了解两个方面。1、HTTP不安全的体现。2、HTTPS如何保障安全的。

网络安全三要素

    私密性:就是你的服务双方的内容不应该被“中间人”获取。

    完整性:最常见的体现是篡改和伪装,篡改是指,拦截或访问信息后,攻击者可以修改信息使其对己有利。伪装是指,攻击者假扮成某人。例如伪装成服务器,向客户端提供相似的服务,然后获取客户端发来的信息。

    可用性:对授权实体随时可用。对可用性的攻击通常指的是Dos攻击。

HTTP的安全性分析

        首先HTTP是明文传输的,存在被窃听的风险,防止被窃听最好的办法就是加密,但加密也分两种方式,对称加密和非对称加密。两种方式各有优劣,对称加密容易被破解,一旦攻击者获得秘钥,那么通信两端传输的信息对攻击者来说就是明文的了。非对称加密有两个秘钥,公钥加密,对所有人公开,私钥解密,只在服务端保存,不能被泄露。非对称加密破解非常困难,攻击者不知道私钥的情况下无法窃取通信数据。但是非对称加密的效率非常低,对称加密和解密相对相对高效。为了解决这个问题,可以先用非对称加密的方式让通信双方协商一个对称的秘钥,本次连接的所有信息传输都用这个秘钥进行加解密,由于每次连接使用的秘钥都是随机的,攻击者就不能再短时间内将秘钥破解掉。如果以这种方式进行通信,则必须经历一下两个步骤:

        上述的第一个步骤中使用了非对称的加密方式,也就是说在通信前,客户端需要先获取服务端的公钥(或者说服务端的证书),然后才能用非对称的方式进行协商。问题是在获取公钥的过程中,也有可能被攻击者截获,然后攻击者将公钥替换成自己的公钥,那客户端用攻击者的公钥加密数据,会被攻击者解密。为了解决这个问题,客户端需要将获取到的公钥向双方都可信赖的第三方机构进行确认,当然服务端需要先在第三方机构备案自己的公钥,然后可信赖的第三方机构给服务端颁发证书(CA证书)。

        还有一个问题,在客户端准备验证服务端证书是否可信赖时,需要客户端先向第三方机构发送验证证书的请求,这个过程也有可能被攻击者拦截,所以这个过程同样需要加密,那么就必须要求认证机关的公开密钥必须安全地转交给客户端。使用通信方式 时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布 版本时,会事先在内部植入常用认证机关的公开密钥

    所以使用非对称加密方式进行共享秘钥协商的过程如下。

HTTPS协议

        网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。

        Https在建立Socket连接之前,需要进行握手,具体过程如下:

1. 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。

2. 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书。

3. 客户端使用服务端返回的信息验证服务器的合法性,包括:

        a. 证书是否过期

        b. 发型服务器证书的CA是否可靠

        c. 返回的公钥是否能正确解开返回证书中的数字签名

        d. 服务器证书上的域名是否和服务器的实际域名相匹配

        验证通过后,将继续进行通信,否则,终止通信

4. 客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择服务器端在客户端提供的加密方案中选择加密程度最高的加密方式。

5. 服务器将选择好的加密方案通过明文方式返回给客户端。

6. 客户端接收到服务端返回的加密方式后,使用该加密方式生成产生随机码,用作通信过程中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送至服务器。

7. 服务器收到客户端返回的加密信息后,使用自己的私钥进行解密,获取对称加密密钥。 

8. 在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。

1. 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。

2. 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书

4. 客户端使用服务端返回的信息验证服务器的合法性,包括:

        a. 证书是否过期

        b. 发型服务器证书的CA是否可靠

        c. 返回的公钥是否能正确解开返回证书中的数字签名

        d. 服务器证书上的域名是否和服务器的实际域名相匹配

        验证通过后,将继续进行通信,否则,终止通信

5. 服务端要求客户端发送客户端的证书,客户端会将自己的证书发送至服务端。

6. 验证客户端的证书,通过验证后,会获得客户端的公钥。

7. 客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择服务器端在客户端提供的加密方案中选择加密程度最高的加密方式。

8. 将加密方案通过使用之前获取到的公钥进行加密,返回给客户端

9. 客户端收到服务端返回的加密方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后,产生该加密方式的随机码,用作加密过程中的密钥,使用之前从服务端证书中获取到的公钥进行加密后,发送给服务端

10. 服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。

为什么不一直使用 HTTPS

        既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS ?

        其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密,会消耗相当多的资源,平 摊到一台计算机上时,能够处理的请求数量必定也会随之减少因此,如果是非敏感信息则使用 HTTP 通信,只有在包含个人信息 等敏感数据时,才利用 HTTPS 加密通信。

        除此之外,想要节约购买证书的开销也是原因之一。

        要进行 HTTPS 通信,证书是必不可少的。而使用的证书必须向认 证机构(CA)购买。证书价格可能会根据不同的认证机构略有不 同。通常,一年的授权需要数万日元(现在一万日元大约折合 600 人民币)。

        那些购买证书并不合算的服务以及一些个人网站,可能只会选择采 用 HTTP 的通信方式。

参考:《图解HTTP协议》Https单向认证和双向认证

上一篇下一篇

猜你喜欢

热点阅读