HTTPS知识总结

464 阅读13分钟

https 是超文本传输安全协议,即 HTTP + SSL/TLS

一、HTTP 存在的问题

1.1 可能被窃听

首先http本身不具备加密的功能,http的报文是以明文发送的;第二,互联网是由联通起世界各地的网络设施组成,所有发送和接受的数据在经过某些设备时都有可能被截获和窥视;

1.2 认证问题

无法确认你发送到的服务器就是真的目标服务器;无法确定返回的客户端是否是按照真实意图接受的客户端;无法确定正在通信的双方是否具备访问权限,web服务器上某些重要的信息,只想发给特定用户即使是无意义的请求也会照单全收,无法阻止海量请求下的DOS攻击。

1.3 可能被篡改

请求或响应的途中,遭遇攻击者拦截并篡改内容的攻击被称为中间人攻击(MITM)

二、什么是HTTPS

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS 怎么解决HTTP存在的问题呢?

是在通信接口部分用 TLS(Transport Layer Security 传输层安全性协议),TLS协议采用主从式架构模型,用于在两个应用程序间通过网络创建起安全的连接,防止在交换数据时受到窃听及篡改。

Https的作用:

1.内容加密: 建议一个信息安全通道,来保证数据传输的安全;

2.身份认证: 确认网站的真实性

3.数据完整性: 防止内容被第三方冒充或者篡改;

三、什么是SSL/TLS

3.1 SSL

SSL为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取,当前为3.0版本。

SSL协议可以分为两层:

SSL记录协议:

****它记录在可靠的传输协议(如TCP)上,为高层协议提供数据封装、压缩、加密等基本技术支持;

SSL握手协议:

****它建立在 SSL记录协议 之上,用于在实际数据传输开始前,通讯双方进行身份认证、协商加密算法、交换密钥等。

3.2 TLS(传输层安全协议)

用于在两个应用程序之间提供保密性和数据完整性。TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。 为了保证安全,TLS需要保证信息的: 机密性、可用性、完整性、认证性、不可否认性; TLS协议有两层组成:TLS记录协议、TLS握手协议。

为什么说https是安全的?TLS实际用了对称加密和非对称加密算法的混合。通过非对称加密算法 交换 对称加密算法的密钥,在使用对称加密进行加密解密传输数据,这样就保证了会话的机密性。过程如下:

1.浏览器给服务器发送一个随机数client-random和一个支持加密方法列表;

2.服务器把另一个随机数server-random、加密算法、公钥传给浏览器;

3.浏览器又生成另一个随机数pre-random,并用服务器刚刚传来的公钥加密后传给服务器;

4.服务器用死要解密,得到了pre-random;

  1. 浏览器和服务器都将三个随机数(client-random、server-random、pre-random)用协商好的加密算法混合生成最终密钥;

这样即便被劫持,中间人没有私钥就拿不到pre-random,无法生成最终的密钥,但是又有一个问题,如果一开始就被DNS劫持,拿到的的密钥不是服务器给的,而是中间人的,数据还是会被窃取,所以就拥有了数字证书的概念(验证数据的完整性);

3.3 SSL和TLS的关系

TLS是SSL的升级版,而且TLS1.2版本以下都已废弃,目前主要用的是TLS 1.2和TLS 1.3。而OpenSSL则是开源版本的。

3.4 SSL/TLS协议作用

1、认证用户和服务器,确保数据发送到正确的服务器和客户机

2、加密数据防止数据在途中被窃取

3、维护数据的完整性,确保数据不会在传输的途中改变

3.5 SSL、TLS的握手过程

SSL协议在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密,也就是说在SSL上传送的数据是使用对称密钥加密的!因为非对称加密的速度缓慢,耗费资源。其实当客户端和主机使用非对称加密方式建立连接后,客户端和主机已经决定好了在传输过程使用的对称加密算法和关键的对称加密密钥,由于这个过程本身是安全可靠的,也即对称加密密钥是不可能被窃取盗用的,因此,保证了在传输过程中对数据进行对称加密也是安全可靠的,因为除了客户端和主机之外,不可能有第三方窃取并解密出对称加密密钥!如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。流程如下,在上文也有提及该流程;

客户端首次发出请求

由于客户端(如浏览器)对一些加密算法的支持程度不一样,但是在TLS协议传输过程中必须使用同一套加密算法才能保证数据正常的加密与解密。在TLS握手阶段,客户端首先告知服务器,自己支持哪些加密算法,所以客户端需要将本地支持的加密套件的列表传送给服务器。除此之外,客户端还要产生一个随机数(第一个随机数),这个随机数一方面需要在客户端保存,另一方面需要传送给服务端,客户端的随机数需要跟服务端的饿随机数结合起来产生后面讲到的预主密钥。

服务端首次回应

服务端在接收到客户端的消息后,服务端需要确定加密协议的版本,以及加密的算法,然后也生成一个随机数(第二个随机数),将这个随机数、加密算法、协议的版本、将自己的证书一并发给客户端。

客户端再次回应

****客户端首先会对服务器下发的证书进行验证,验证通过后,客户端再一次产生一个随机数(第三个随机数),然后使用证书中的公钥进行加密,以及放一个changecipherSpec消息(编码改变的消息,一个独立的协议,体现在数据包中就是一个字节的数据,用于告知服务端,客户端已经切换到之前协商好的加密套件(Cipher Suite)的状态,准备使用之前协商好的加密套件加密数据并传输了),还有整个前面所有的hash值,进行服务器验证。

客户端使用前面的两个随机数以及刚刚新生成的新随机数,使用与服务器确定的加密算法,生成一个Session Secret。

服务器再次回应

****服务器在接受到客户端传过来的第三个随机数的加密数据后,使用私钥将这段加密的数据进行解密,并对数据进行验证,会使用跟客户端同样的方式进行生成密钥(将前两个密钥与刚刚收到的密钥利用加密算法生成一个与客户端相同的密钥),一切准备好了之后,服务器也会给客户端发送一个changeCipherSpec,告知客户端自己已将切换到协商过的加密套件状态了,准备使用加密套件和session Secret 加密一段Finish字段消息发给客户端,以用来验证之前通过握手建立起来的加解密通道是否成功。

后续客户端与服务器之间通信

****确定秘钥之后,服务器与客户端之间就会通过商定的秘钥加密消息了,进行通讯了。整个握手过程也就基本完成了。

四、加密相关知识

4.1 对称加密

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。

常见的对称加密有:DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA。

4.2 非对称加密

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey);并且加密密钥和解密密钥是成对出现的。非对称加密算法在加密和解密过程使用了不同的密钥,非对称加密也称为公钥加密,在密钥对中,其中一个密钥是对外公开的,所有人都可以获取到,称为公钥,其中一个密钥是不公开的称为私钥。

非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是 2048 位,意味着待加密内容不能超过 256 个字节。

4.3 摘要算法

数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。“数字摘要“是https能确保数据完整性和防篡改的根本原因。

4.4 数字签名

数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

数字签名的过程如下:

明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名

数字签名有两种功效:

1、能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。

2、数字签名能确定消息的完整性。

注意:

数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围

4.5 数字证书

数字证书的应用目的:

对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机那里发布的,而且没有被篡改过呢?亦或者请求的目标主机本本身就从事窃取用户信息的不正当行为呢?这时候,我们需要有一个权威的值得信赖的第三方机构(一般是由政府审核并授权的机构)来统一对外发放主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题的发生。

数字证书的颁发过程:

用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息(根证书私钥签名)。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布,数字证书各不相同,每种证书可提供不同级别的可信度。

证书包含的内容:

●证书颁发机构的名称

●证书本身的数字签名

●证书持有者公钥

●证书签名用到的Hash算法

五、HTTPS优缺点

优点:

●内容加密,中间无法查看原是内容;

●身份认证,保证用户正确访问,例如访问百度,即使DNS被劫持到第三方站点,也会提醒用户没有访问百度服务,可能被劫持;

●数据完整性,防止内容被第三方冒充或篡改;

●虽然不是绝对安全,但是是现行架构下最安全的解决文案了,大大增加了中间人的攻击成本。

缺点:

●因为有用到数字正式,所以是需要收费的,功能越强的证书费用越贵

●证书需要绑定ip,不再在同一个IP上百年规定多个域名

●https需要进行非对称的加解密,且需要三次握手。首次连接比较慢

六、HTTPS和HTTP的区别

●https协议需要到CA申请证书。

●http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。

●http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

●http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

●HTTP在OSI网络模型中是在应用层,而HTTPS的TLS是在传输层

七、HTTPS架构概览

参考文章:

  1. 《20分钟助你拿下HTTP和HTTPS,巩固你的HTTP知识体系》juejin.cn/post/699462…
  2. 《详解HTTPS是如何确保安全的》 www.cnblogs.com/andy-zhou/p… 3.《分分钟让你理解HTTPS》juejin.cn/post/684490…