HTTPS
1、背景
这里有一组很有意思的漫画可以很直白的理解HTTP到HTTPS发展和建立过程。
http
是指超文本传输协议,是一个客户端与服务器之间请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。由于HTTP的特点:无状态,且传输的数据都是明文
的,基于互联网3.0时代的开启,对数据传输安全的要求越来越高,继而推出了HTTPS。
HTTP请求过程中:
客户端发出的请求很容易被黑客截获,如果此时黑客冒充服务器,则其可返回任意信息给客户端,而不被客户端察觉,所以我们经常会听到一词“劫持”。
所以 HTTP 传输面临的风险有:
- (1) 窃听风险:黑客可以获知通信内容。
- (2) 篡改风险:黑客可以修改通信内容。
- (3) 冒充风险:黑客可以冒充他人身份参与通信。
由此引出HTTPS:
1.1、前期基础知识
对称加密、非对称加密以及数字签名和数字证书
这里简单说明:
1、对称加密
- 加密和解密使用的是同一把钥匙,即:使用相同的密匙对同一密码进行加密和解密
- 例如:DES、AES-GCM、ChaCha20-Poly1305等
2、非对称加密
- 加密和解密使用的不是同一把密钥有两个钥匙,公钥(Public Key)和私钥(Private
Key)。公钥和私钥是成对的存在,如果对原文使用公钥加密,则只能使用对应的私钥才能解密; - 例如:RSA、DSA、ECDSA、 DH、ECDHE
3、哈希算法:得到摘要(Digest)
- 将信息明文转化为固定长度的字符,属于
明文
(未加密的原始信息,例如上面的helloworld)到数字签名
之间的转换过程 - 将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,hash后得到的是固定长度的信息加密解密就会快很多
- 例如:MD5、SHA-1、SHA-2、SHA-256 等
4、数字签名
- 使用
私钥
对摘要(Digest)
再次加密
2、定义
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS
, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
3、作用
1、内容加密:采用混合加密技术,中间者无法直接查看明文内容
2、验证身份:通过证书认证客户端访问的是自己的服务器
3、保护数据完整性:防止传输的内容被中间人冒充或者篡改
4、SSL建立连接过程(面试热点)
这里还是想说明,先看完HTTP到HTTPS的发展过程,理解的更为透彻。
-
1、client向server发送请求https://baidu.com,然后连接到server的
443端口
,发送的信息主要是一个用作产生密钥的随机数1
和客户端支持的加密算法
。密文族(Cipher Suites)
,一般写法是”密钥交换算法-对称加密算法-哈希算法
,以“TLS_RSA_WITH_AES_256_CBC_SHA”
为例:- (a)TLS为协议,RSA为密钥交换的算法;
- (b)AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式);
- (c)SHA是哈希的算法。
- 浏览器支持的加密算法一般会比较多,而服务端会根据自身的业务情况选择比较适合的加密组合发给客户端。
-
2、server接收到信息之后给予client响应握手信息,包括
产生密钥的随机数2
和匹配好的协商加密算
法。- 这个加密算法一定是client发送给server加密算法的子集。服务端挑选了
“TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”
,解释如下:- (a)TLS为协议,RSA为密钥交换的算法;
- (b)AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式);
- (c)SHA是哈希的算法。
- 这就意味着服务端会使用
ECDHE-RSA
算法进行密钥交换,通过AES_128_GCM
对称加密算法来加密数据,利用SHA256
哈希算法来确保数据完整性。
- 这个加密算法一定是client发送给server加密算法的子集。服务端挑选了
-
3、随即server给client发送第二个响应报文是
数字证书
。服务端必须要有一套数字证书,这套证书其实就是一对公钥和私钥
。传送证书,这个证书其实就是公钥
。- 证书包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
- 证书包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
-
4、客户端
解析证书
,这部分工作是由客户端的TLS
来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥pre-master )
。- 客户端会向服务器传输一个
“pubkey”随机数
,证书公钥
加密后发送给服务器,服务器收到之后,利用特定算法生成另外一个“pubkey”随机数
,客户端利用这两个“pubkey”随机数
生成一个pre-master 随机数
。
- 客户端会向服务器传输一个
-
5、客户端认证证书通过之后,接下来是通过
随机值1、随机值2和预主秘钥
组装会话秘钥Master Secret
。
-
6、传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
-
7、服务端解密得到
随机值1、随机值2和预主秘钥
,然后组装会话秘钥
,跟客户端会话秘钥相同。 -
8、客户端通过
会话秘钥
加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。 -
9、同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。
5、Https的缺点(对比优点)
- 1、Https协议握手阶段比较费时,会使页面的加载时间延长近。
- 2、Https连接缓存不如Http高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。
- 3、Https协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
- 4、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
- 5、成本增加。部署 Https后,因为 Https协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。
- 6、Https协议的加密范围也比较有限。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
HTTPS和HTTP的区别
- 1、https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(原来网易官网是http,而网易邮箱是https。)
- 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- 4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
参考
1、https://www.zhihu.com/search?q=https%E5%8E%9F%E7%90%86&utm_content=search_suggestion&type=content
2、https://zhuanlan.zhihu.com/p/22142170
3、https://www.zhihu.com/search?type=content&q=https%20%E5%92%8CHTTP%E7%9A%84%E5%8C%BA%E5%88%AB