
HTTPS(全称:超文本传输协议安全,Hypertext Transfer Protocol Secure)是一个安全的HTTP通道,简单来说就是HTTP的安全版本。在本文中,我们来深入探讨一下它的原理。
1
为什么需要https?
使用https的原因真的很简单,是由于http的不安全性。
当我们把私人数据(比如你的银行卡和身份证)发送到服务器时,如果我们使用http进行通信。那么安全性将得不到保证。
首先,在数据传输的过程中,数据可能会被中间人抢走,然后数据会被中间人窃取。
其次,中间人获取数据后,可能会对数据进行修改或替换,然后发送给服务器。
最后,服务器收到数据后,无法确定数据是否被修改或替换。当然,如果服务器无法判断数据是否真的来源于客户端。
综上所述,http有三个缺点:
无法保证新闻的保密性
无法保证新闻的完整性和准确性
无法保证新闻泉源的可靠性
Https就是为了理解和解决上述问题而应运而生的。
2
基本概念
为了理解http中存在的问题,https采用了一些加密、解密、数字证书和数字签名的技术。我先介绍一下这些工艺的基本概念。
对称加密与非对称加密
为了保证新闻的保密性,需要加密和解密。加解密算法现在主要分为对称加密和非对称加密。
1.对称加密(共享密钥加密):客户端和服务器共享一个密钥对新闻进行加密和解密,称为对称加密。客户端和服务器就加密密钥达成一致。客户端在发送新闻前用这个密钥加密,发送到服务器后,服务器用这个密钥解密得到新闻。
对称加密的优势:
对称加密解决了http中新闻保密性的问题
对称加密的缺陷:
对称加密虽然保证了新闻保密性,然则由于客户端和服务器共享一个密匙,这样就使得密匙稀奇容易泄露。
由于密匙泄露风险较高,以是很难保证新闻泉源的可靠性、新闻的完整性和准确性。
2.非对称加密(公钥加密):既然对称加密中密钥如此容易泄露,我们可以接受一种非对称加密的方法来解决。
当接受非对称加密时,客户端和服务器都有一个公钥和一个私钥。公钥可以对外公开,私钥只能自己看到。
用公钥加密的新闻只能用相应的私钥解密。相反,用私钥加密的新闻只能用公钥解密。这样,在发送消息之前,客户端使用服务器的公钥对消息进行加密,服务器收到消息后使用自己的私钥进行解密。
不对称加密的优势:
非对称加密接纳公有密匙和私有密匙的方式,解决了http中新闻保密性问题,而且使得私有密匙泄露的风险降低。
由于公匙加密的新闻只有对应的私匙才气解开,以是较大程度上保证了新闻的泉源性以及新闻的准确性和完整性。
不对称加密的缺陷;
非对称加密时需要使用到接收方的公匙对新闻举行加密,然则公匙不是保密的,任何人都可以拿到,中间人也可以。那么中间人可以做两件事,第一件是中间人可以在客户端与服务器交流公匙的时刻,将客户端的公匙替换成自己的。这样服务器拿到的公匙将不是客户端的,而是服务器的。服务器也无法判断公匙泉源的准确性。第二件是中间人可以不替换公匙,然则他可以截获客户端发来的新闻,然后窜改,然后用服务器的公匙加密再发往服务器,服务器将收到错误的新闻。
非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,对照消耗系统资源。正是由于云云,https将两种加密连系了起来。
数字证书和数字签名
为了理解非对称加密中公钥spring的不安全性。我们可以使用数字证书和数字签名来解决这个问题。
1.申请数码证书
现实中有一些专门的颁发数字证书的机构,我们称之为CA认证机构。
我们(服务器)可以向这些ca申请数字证书。
申请流程大致如下:
我在内地生了一对密钥,然后我带着我的公钥和其他信息(比如公司名称)去CA申请数字证书。
CA在得到信息后,会选择一种单向哈希算法(例如常见的MD5)对信息进行加密,加密后的设备称为abstract。
单向哈希算法的一个特点是单向不可逆。只要原始内容有一点点变化,加密后的数据就会有很大的不同(虽然有很小的重复可能性,感兴趣的朋友请理解鸽笼原理),从而防止信息被篡改。
摘要未完成后,CA会用自己的私钥对摘要进行加密,摘要的加密数据称为数字签名。
如何推广赚钱(新手运营淘宝客月入三万)
最后,CA会将我们的申请信息(包括服务器的公钥)与数字签名进行整合,从而生成一个数字证书。然后CA会通知我们数字证书。
2.数字证书是如何工作的?
服务器获取数字证书后,会将数字证书发送给客户端,客户端需要用CA的公钥解密数字证书,并验证数字证书的合法性。那怎么才能得到CA的公钥呢?我们的计算机和浏览器内置了权威部门的根证书,这些根证书包含CA的公钥。
之所以说是根证书,是因为在现实生活中,认证中心是分层级的,也就是说有一个顶级的认证中心和下面子层级的认证中心,是一个树形结构。顶级组织的根证书内置在电脑里,但并不忧郁。根证书的公钥也适用于子级别。
客户端用CA的公钥解密数字证书。如果解密成功,则意味着该证书来自合法的证书颁发机构。解密乐成后,客户端得到摘要。
此时,客户端将使用与CA相同的哈希算法生成应用程序信息的摘要,并与解密后的摘要进行比较。如果相同,说明内容完整,没有被篡改。最后,客户端可以从证书中安全地获得服务器的公钥,并与服务器进行安全的非对称加密通信。服务器也可以用同样的方式获得客户端的公钥。
下图以图形方式说明了一个常见的证书申请及其使用过程。
3
https原则
通过以上学习,我们了解了对称加密和非对称加密的特点和优缺点,以及数字证书的作用。Https不接受单一的工艺来实现,而是根据这些工艺的特点将其充分集成,以最大限度地提高性能和安全性。这种集成技术被称为SSL(安全套接字层安全套接字层)。所以https并不是一个新的协议,它只是在http上加了一个加密的外壳。
https的建立
首先看一下既定的流程图:
这里把https建立到断开分为6个阶段,12个过程。下面将对12门课程逐一进行点评。
1.客户端首先通过发送客户端问候消息与SSL进行通信。该消息包括客户端支持的SSL的指定版本和密码套件列表(加密算法和使用的密钥长度等。).
2.当服务器可以保持SSL通信时,它将使用服务器Hello消息进行回复。与客户端一样,SSL版本和加密组件也包含在消息中。从接收到的客户机加密组件中过滤出服务器加密组件的内容。
3.服务器发送证书消息。该消息包含公钥证书。
4.最后,服务器发送服务器Hello Done消息,通知客户端初始SSL握手协商部门完成。
5.5的第一次握手后。SSL,客户端用客户端密钥交换消息进行响应。该消息包含一个随机密码字符串,称为通信加密中使用的预主密钥。在步骤3中,消息已经用公钥加密。
6.然后,客户端继续发送更改密码规范消息。该消息将提醒服务器,该消息之后的通信将接受预主密钥加密。
7.客户端发送完成的消息。该消息包括到目前为止所有相邻消息的总体检查值。握手协商能否成功,取决于服务器能否准确解密消息。
8.服务器还发送更改密码规范消息。
9.服务器也发送完成的消息。
10.在服务器和客户端之间完成消息交换之后,SSL邻接关系就建立了。当然,通信会受到SSL的珍视。从这里开始,首先持有应用层协议的通信,即发送HTTP请求。
11.应用层协议通信,即发送HTTP响应。
12.最后,客户端断开邻接关系。当邻接断开时发送close_notify消息。上图已省略,在此步骤后发送TCP FIN消息,关闭与TCP的通信。
另外,在上面的流程图中,应用层在发送数据时会附加一个名为MAC(消息认证码)的消息摘要。MAC可以发现消息是否被篡改,从而保证消息的完整性。
我们用一张图来形象地解释一下。这个图比上面的数字证书图详细一倍(图片来源于图文HTTP)。
从上面的介绍可以看出,https首先行使数字证书,保证服务器的公钥能够安全正确的到达客户端。然后使用非对称加密来共享密钥,最后使用共享密钥安全地交换数据。
4
使用https
Https这么安全,我们是不是任何情况下都要用https进行通信?答案是否定的。
1.1.https虽然提供了安全传输新闻的通道,但是每次加密和解密新闻都要花费大量的时间,浪费新闻系统资源。所以,我们真的不需要使用https,除非在一些安全控制要求高的场景,比如银行系统、购物系统,以及其他安全要求不高的场景,必须使用https进行通信。
2.https的使用需要使用数字证书,但是像往常一样,权威机构颁发的数字证书是要收费的,价格也贵。所以,对于一些个人和私人网站,如果安全性要求不高,就没必要使用https。