Web时代-Https

361 阅读10分钟

图片

今天我们继续深入http,本篇将介绍Https的内容,相信你看过之后对https有一定的了解。


HTTPS

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1]  。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 (来源于:百度百科)

为什么出现https呢?

在http请求都是通过明文请求的而不法分子很容易通过抓包工具获取到我们在网络间传输的信息。想象我们在支付时银行卡密码通过明文在网络间传输那是不是风险很大。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。

要想了解 HTTPS 为何安全,还得继续了解一下这些概念:明文,密文,密钥 ,加密算法、摘要算法、数字签名和数字证书。

明文:明文指的是未被加密过的原始数据。
密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。

加密算法

对称密钥密码体制

对称密钥密码体制,即加密密钥和解密密钥是使用相同的密码体制。对称密钥加密技术的缺点之一就是发送者和接收者在对话之前,一定要有一个共享的密钥,所以不太安全。双方必须协商一个保密的密钥。

其加密过程如下:明文 + 加密算法 + 私钥 => 密文
解密过程如下:  密文 + 解密算法 + 私钥 => 明文

对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。加密解密算法需要密钥双方必须知道,但密钥无法通过网络进行发送。这样又有问题了。

图片

公钥密码体制(非对称加密) RSA

公钥密码体制(非对称加密)使用不同的加密密钥与解密密钥。公钥密码体制产生的主要原因有两个:一是对称密钥密码体制的密钥分配问题,二是对数字签名的需求。 (关于RSA算法可以去百度一下,这里不在展开讲述)

在公钥密码体制(非对称加密)中不必双方协商一个保密的密钥,而是有一对钥匙,一个是保密的,称为私钥;另一个是公开的,称为公钥。

在公钥密码体制(非对称加密)中,加密密钥是公开的,解密密钥(私钥)是需要保密的,加密算法和解密算法也是公开的。

公钥密码体制(非对称加密)的加密和解密有如下特点:

用私钥加密的数据,只有对应的公钥才能解密;用公钥加密的数据,只有对应的私钥才能解密。

图片

密钥对产生器产生出接收者 B 的一对密钥,即加密密钥 PK 和解密密钥 SK。发送者 A 用 B 的公钥 PK 作为加密密钥来加密信息,B 接收后用解密密钥 SK 解密。

使用对称密钥时,由于双方使用同样的密钥,因此在通信信道上可以进行一对一的双向保密通信,双方都可以用同一个密钥加密解密。

使用公开密钥时,在通信信道上可以是多对一的单向保密信道。即可以有多人持有 B 的公钥,但只有 B 才能解密。

图片

摘要算法

摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以被逆向解密的只有CRC32算法,同样这个摘要算法可以为一个hash算法之后变为消息摘要。只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。

图片

cuFCIs.png

数字签名

用加密系统对报文进行签名,以说明是谁编写的报文,同时证明报文未被篡改过,这种技术称为数字签名

数字签名是附加在报文上的特殊加密校验码。使用数字签名的好处有:

签名可以证明是作者编写了这条报文。只有作者才会有最机密的私有密钥,因此,只有作者才能计算出这些校验和。签名可以防止报文被篡改,如果有人在报文传输过程中对其进行了修改,校验和就不再匹配了。数字签名通常是用非对称公开密钥技术产生的。

图片

图片来源于网络

看上图,任何人都能用 A 的公钥 PK 对密文进行 E 运算后得到 A 发送的明文。可见这种通信并非为了保密,而是为了进行签名和核实签名,即确认此信息是 A 发送的(使用 A 的密钥进行加密的报文,只有使用 A 的公钥才能正确解密)。但上述过程仅对报文进行了签名,对报文 X 本身却未保密,所以要采用下图的方法,同时实现秘密通信和数字签名。

图片

图片来源于网络

数字证书

假如你想访问一个网站,怎么确保对方给你的公钥是你想访问的网站的公钥,而不是被中间人篡改过的?

数字证书的出现就是为了解决这个问题,它是由数字证书认证机构(CA)颁发的,用来证明公钥拥有者的身份。换句话说,数字证书的作用就相当于人的身份证,身份证证明了张三就是张三,而不是别人。

数字证书一般包含以下内容

对象的名称(人、服务器、组织等);过期时间;证书发布者(由谁为证书担保);来自证书发布者的数字签名;对象的公钥;对象和所用签名算法的描述性信息。任何人都可以创建一个数字证书,但由谁来担保才是重点。数字证书是数字证书在一个身份和该身份的持有者所拥有的公/私钥对之间建立了一种联系,由认证中心(CA)或者认证中心的下级认证中心颁发的。根证书是认证中心与用户建立信任关系的基础。在用户使用数字证书之前必须首先下载和安装

图片

数字证书的数字签名计算过程

用摘要算法对数字证书的内容计算出摘要;用数字证书的私钥对摘要进行加密得到数字签名。

图片

图片来源于网络

当浏览器收到证书时,会对签名颁发机构进行验证,如果颁发机构是个很有权威的公共签名机构,浏览器可能就知道其公开密钥了(浏览器会预装很多签名颁发机构的证书)。如果对签名颁发机构一无所知,浏览器通常会向用户显示一个对话框,看看他是否相信这个签名发布者。

因为数字证书的公钥是公开的,任何人都可以用公钥解密出数字证书的数字签名的摘要,然后再用同样的摘要算法对证书内容进行摘要计算,将得出的摘要和解密后的摘要作对比,如果内容一致则说明这个证书没有被篡改过,可以信任。

这个过程是建立在被大家所认可的证书机构之上得到的公钥,所以这是一种安全的方式。

图片

验证签名

Https 请求的整个流程

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。

图片

1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

3.服务器将自己的公钥发送给客户端。

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,客户端如何验证数字证书的合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

以上就是今天与各位分享的Https,如果喜欢请关注我。后续我会持续输出。

图片

参考:《码农翻身》

参考:《菜鸟教程》