Loading

https详解

本文主要内容:https基础介绍,工作流程,工作原理

http or https?

https

1)Google 已调整搜索引擎算法,让采用 HTTPS 的网站在搜索中排名更靠前;

2)从 2017 年开始,Chrome 浏览器已把采用 HTTP 协议的网站标记为不安全网站;

3)苹果要求 2017 年 App Store 中的所有应用都必须使用 HTTPS 加密连接;

4)微信小程序也要求必须使用 HTTPS 协议;

5)HTTP/2.0 支持默认以 HTTPS 为基础。

https是什么

简而言之,HTTPS 就是在 HTTP 下加入了 SSL or TSL 层,在传输时对数据加密,从而保护了交换数据隐私和完整性,提供对网站服务器身份认证的功能,简单来说它就是安全版的HTTP。

HTTP HTTPS
http http
  • | SSL/TSL
    TCP | TCP
    IP|IP

SSL/TSL是什么

SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。

SSL/TSL作用

  • 通过证书等信息确认网站的真实性;
  • 建立加密的信息通道;
  • 数据内容的完整性。

HTTPS=网站认证+数据加密+完整性验证+HTTP

https加密了什么

  • 除IP/域名,端口,User-Agent外都被加密

即运营商/HK/GFW只能知道你访问的哪个ip或者域名,端口, User-Agent, Cookie是HTTP包的一部分,也被加密

https加密方式

在了解https工作流程之前,先来看看https的加密方式

对称加密
  • 对称加密对称加密是指加密与解密的使用同一个密钥的加密算法。

目前常见的加密算法有:DES、AES、IDEA 等

弊端:客户端和服务器需要同一个密钥,那么必须有一方将密钥发送给另一方,一旦该密钥在发送过程中被截获,安全无法保证。

非对称加密
  • 非对称加密非对称加密使用的是两个密钥,公钥与私钥,我们会使用公钥对网站账号密码等数据进行加密,再用私钥对数据进行解密。这个公钥会发给查看网站的所有人,而私钥是只有网站服务器自己拥有的。

目前常见非对称加密算法:RSA,DSA,DH等。

弊端:公钥对所有人开放,包括黑客,也就是说拿到公钥的人都可以解开密文。

所以https是两种加密一起使用

https工作流程

https通信流程

(1) 客户端向服务器端索要并验证公钥。

(2) 双方协商生成"对话密钥"。

(3) 双方采用"对话密钥"进行加密通信。

1,2称为握手阶段

SSL四次握手

"握手阶段"的所有通信都是明文的。

  1. 客户端->服务端
(1) 支持的协议版本,比如TLS 1.0版。

(2) 一个客户端生成的随机数A

(3) 支持的加密方法,比如RSA公钥加密。

(4) 支持的压缩方法。
  1. 服务器->客户端
(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

(2) 一个服务器生成的随机数B

(3) 确认使用的加密方法,比如RSA公钥加密。

(4) 服务器证书。(CA)

除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。

  1. 客户端->服务端

客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务器的公钥。

(1) 一个随机数C。该随机数用服务器公钥加密,防止被窃听。

(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"(对称加密密钥)。

  1. 服务器->客户端

服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。

(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

而服务器用只有自己知道的私钥来解密,获取第三个随机数。只有,服务端和客户端都有了三个随机数N1+N2+N3,然后两端就使用这三个随机数来生成“对话密钥”,在此之后的通信都是使用这个“对话密钥”来进行对称加密解密。
因为这个过程中,服务端的私钥只用来解密第三个随机数,从来没有在网络中传输过,这样的话,只要私钥没有被泄露,那么数据就是安全的。

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

加密套件的交换

客户端把自身支持的一系列Cipher Suite(密钥算法套件,后文简称Cipher)[C1,C2,C3, …]发给服务器;

服务器接收到客户端的所有Cipher后,与自己支持的套件作对比,如果找到双方都支持的Cipher,则告知客户端;

客户端与服务器使用匹配的Cipher进行后续通信。如果服务器没有找到匹配的算法,客户端将给出错误信息。

客户端如何校验 CA 证书

CA 证书其实就是数字证书,是由 CA 机构颁发的。至于 CA 机构的权威性,那么是毋庸置疑的,所有人都是信任它的。CA 证书内一般会包含以下内容:

证书的颁发机构、版本
证书的使用者
证书的公钥
证书的有效时间
证书的数字签名 Hash 值和签名 Hash 算法
…

CA 证书中的 Hash 值,其实是用证书的私钥进行加密后的值(证书的私钥不在 CA 证书中)。然后客户端得到证书后,利用证书中的公钥去解密该 Hash 值,得到 Hash-a ;然后再利用证书内的签名 Hash 算法去生成一个 Hash-b 。最后比较 Hash-a 和 Hash-b 这两个的值。如果相等,那么证明了该证书是对的,服务端是可以被信任的;如果不相等,那么就说明该证书是错误的,可能被篡改了,浏览器会给出相关提示,无法建立起 HTTPS 连接。除此之外,还会校验 CA 证书的有效时间和域名匹配等。

计算Hash值,指的是利用Hash算法(MD5或SHA)将任意长度的数据转换为固定长度的数据。

参考

阮一峰的网络日志-SSL/TLS协议运行机制的概述

HTTPS加密原理-俞其容

HTTPS深入理解

一文完全理解HTTPS

posted @ 2021-01-25 18:11  李帆1998  阅读(562)  评论(0编辑  收藏  举报