文章目录
-
- 概述
- SSL/TLS的历史
- 加解密的两种方法
- 保护数据内容的两个方面
-
- 数据解密内容是否正确
- 对称密钥协商过程
- 中间总结
- 对称密钥协商过程(进阶)
- 最后总结
概述 我们每天都在使用互联网,所有数据都要通过计算机网络进行传输,网络本身只具备传输数据的能力,并不能保证数据的安全性。
数据在公共网络中移动的时候,很容易被第三方截获、篡改,造成信息泄漏、中间人攻击等各种网络安全性问题。
这就是计算机网络的真实情况,也是
SSL/TLS
协议诞生的背景!要解决的问题:能够在不安全的网络环境中,安全的传输数据。
安全性体现在两个方面:
- 数据可以被截获,但是内容不能泄漏。
- 数据无法被篡改,一旦中途被篡改,客户端或者服务端拿到数据后立即就能发现。
1994
年,NetScape
公司设计出SSL(Secure Sockets Layer)
协议1.0
版,但是未发布。1995
年,NetScape
公司发布SSL 2.0
版,很快发现有严重漏洞。1996
年,SSL 3.0
版问世,得到大规模应用。1999
年,互联网标准化组织ISOC
接替NetScape
公司,发布了SSL
的升级版TLS 1.0
版。2006
年和2008
年,TLS
进行了两次升级,分别为TLS 1.1
版和TLS 1.2
版。2011
年发布了TLS 1.2
的修订版。2014
年提出TLS 1.3
版本,直到2018
年才正式纳入标准。综上所述,
SSL
和TLS
就是同一个东西,因为历史版本原因,有了两个名字,可以认为TLS
是SSL
的升级版。但是更为常用的名字还是
SSL
,所以下文为了叙述方便,统一称为SSL
协议。加解密的两种方法 实现
SSL
协议的安全性,基本思路就是数据加密。从密码学原理来看,加解密需要密钥,具体方法可分为两种:
- 对称加密:加解密使用同一个密钥,这个密钥既能加密,又能解密。
- 非对称加密:加解密使用一对密钥,密钥分公钥和私钥,公钥加密只有私钥能解,私钥加密只有公钥能解。
SSL
就是基于这两种加密方法,完成数据安全性的保障,具体怎么运用的,继续看下文。保护数据内容的两个方面 先来做一个约定:在网络通信过程中,发送数据的一方称为客户端,接收数据的一方称为服务端,从网络中窃取数据的一方称为第三方。
SSL
协议采用对称加密来保护数据,客户端和服务端在发送数据之前,协商出一个密钥,发送者用这个密钥对数据加密,之后再扔到网络中传输,服务端拿到数据后用相同的密钥解密,还原数据内容。在网络传输过程中,如果数据被第三方截获,他没有对称密钥,是解不出来数据内容的。因此,数据内容可以得到保护,不会泄漏。
如果第三方截获密文数据以后,尝试替换或者修改密文数据,客户端或服务端拿到数据以后,用对称密钥解不出来正确内容,立刻就能知道数据出现了问题!
此时,就会出现两个问题:
- 解密数据以后,客户端和服务端怎么知道数据内容是否正确?
- 这个对称密钥是怎么协商出来的?
不论客户端还是服务端,解密结果无非就是两种情况:
- 解密失败!可以判定数据一定不对,因为解密算法都搞不定。
- 解密成功!收到了内容,但是内容对不对不知道。
http
协议内容,如果服务端能够解析成功,那内容就是对的,如果解析失败,内容肯定是有问题的!客户端同理。至于错误内容,到底是双方发的就有问题,还是被第三方篡改的,已经不重要了。
SSL
协议只是保证双方都能够正确接收到彼此传输的内容,在解密成功的情况下,判断内容对不对是应用层协议的事情。通常来讲,如果数据被第三方篡改了,即使解密成功了,得到的内容也是一堆乱码,除非第三方真的神通广大,拿到了对称密钥,给出了正确的密文数据!
对称密钥协商过程
这个过程就是
SSL
协议最核心也是最关键的部分,理解了对称密钥协商过程,也就真正理解了SSL
协议。客户端和服务端所有通信都是基于网络的,因此,对称密钥协商过程也是通过网络进行的,不仅如此,协商过程发送的数据内容几乎还都是明文传输的!
密钥协商过程中的所有元数据都能被第三方截获!
客户端和服务端在第三方监视下协商出对称密钥,还能不被第三方获取到,这就是
SSL
协议的巧妙之处!具体实现要用非对称加密方法,服务端提前在本地环境中生成非对称密钥,私钥自己保管好,公钥可以给任何人。
协商过程如下(先这样理解,实际有出入,后面进阶部分纠正):
- 客户端通过网络请求,向服务端索取公钥。
- 客户端随机生成一个对称密钥。
- 客户端将对称密钥用公钥加密,然后通过网络发送给服务端。
- 服务端拿到以后用私钥解密,得到对称密钥。
中间总结 至此,
SSL
协议工作原理机制就算是讲完了,稍微总结一下:SSL
协议实现包含两种加密方法:对称加密,非对称加密。- 非对称加密只进行一次,就是最开始协商对称密钥的时候,目的就是为了能安全传输对称密钥。
- 对称加密为应用层协议数据进行加密,数据内容由应用层协议定义。
- 对称加解密的效率远高于非对称加解密,所以,两种加密方式结合使用,也是
SSL
协议在保障安全的前提下尽可能提高效率的办法。 - 如果不考虑效率问题,
SSL
协议完全可以有另外一种实现方案:通信过程全部采用非对称加密方式,客户端和服务端各自保管私钥,互换公钥,之后的过程使用非对称加密传递数据。
SSL
协议最基本的原理分析,下半部分详细讲述一下对称密钥的协商过程,属于原理进阶吧。前面为了好理解些,将对称密钥协商过程归纳如下:
- 客户端通过网络请求,向服务端索取公钥。
- 客户端随机生成一个对称密钥。
- 客户端将对称密钥用公钥加密,然后通过网络发送给服务端。
- 服务端拿到以后用私钥解密,得到对称密钥。
真实环境中,协商对称密钥相对比较复杂的,实现方案从理论上讲不唯一,有多种理论参考模型,虽然手段可能有差异,但是目的都是为了保障数据的安全性。
对称密钥协商过程又叫“握手阶段”,可类比传输层
TCP
协议的握手阶段,只不过TCP
是三次握手,标准的SSL
协议模型是四次握手。第一次握手
客户端发出加密通信请求,称为
ClientHello
,提供以下一些信息:- 客户端支持的协议版本,比如
TLS 1.0
版。 - 客户端生成一个随机数,稍后用于生成"对话密钥"。
- 客户端支持的对称加密方法,比如
RSA
公钥加密。 - 客户端支持的压缩方法。
服务端收到请求后回应数据,称为
SeverHello
,回应信息:- 服务端确认使用的加密通信协议版本,比如
TLS 1.0
版本。如果没有匹配版本,服务端关闭加密通信。 - 服务端生成的一个随机数,稍后用于生成"对话密钥"。
- 确认使用的加密方法,比如
RSA
公钥加密。 - 服务端数字证书,证书里面包含服务端基本信息以及公钥。
正确的做法是,拿着自己的基本信息和公钥去找权威证书颁发结构,也就是常说的
CA
机构,从他们哪里获取具有公信力的证书。CA
机构会用自己的私钥对证书进行签名,所以这样的证书是无法被篡改的,也能得到所有客户端的认可和校验。第三次握手
客户端收到响应信息后,首先要验证服务端数字证书,如果证书颁布机构不可信、或者证书中包含的基本信息与服务端不一致、又或者证书已经失效,就会告知当前用户,询问用户是否还要继续通信。
如果数字证书验证通过,或者用户人为选择继续通信,客户端就从证书中提取服务端公钥,并向服务端再次发送信息:
- 再次生成一个新的随机数,用服务端公钥加密。
- 客户端加密方法变更通知,表示随后信息都将用双方协商的加密方法和对称密钥发送。
- 服务端握手结束通知,表示服务端的握手阶段结束。这一项同时也是前面发送的所有内容的
hash
值,用来供服务端校验。
注意前面握手阶段提到的随机数,到目前为止,双方都掌握了三个随机数。
两个由客户端生成,一个明文传输给服务端,一个用服务端公钥加密后传输给服务端。
一个由服务端生成,明文传输给客户端。
确定好这三个随机数,客户端和服务端就可以在各自的本地环境中,根据密钥生成器生成对称密钥。数学原理可以保证客户端和服务端生成的密钥是一样的,并且,该密钥无需再次经过网络传输,可以有效避免对称密钥的泄漏问题!
因为第三个随机数是用公钥加密传输的,第三方无法解开,所以,即使第三方截取到另外两个随机数,也不可能根据密钥生成器生成协商出来的对称密钥!
因此,对称密钥就在不安全的网络环境中,安全的产生了。
服务端验证客户端的
hash
值,并生成对称密钥以后,返回客户端响应信息:- 服务端传输加密方式变更通知,表示随后信息都将用双方协商的加密方法和对称密钥发送。
- 服务端握手结束通知,表示服务端握手阶段结束。这一项同时也是前面发送的所有内容的
hash
值,用来供客户端校验。
hash
正确以后,就表示四次握手阶段全部完成。再往后就是用对称密钥加密传输应用层协议数据了。
最后总结
SSL
协议保障数据安全分两个阶段:- 利用非对称加密原理构建出通信双方的对称加解密密钥,这个对称密钥在很多地方也叫做“会话密钥”。
- 利用对称加密方法保护应用层协议数据,提高通信效率。
这就是
SSL
协议精彩的地方!能够在不安全的环境中建立起安全的通信机制。不要把
SSL
协议和TCP
协议混为一谈,他们的地位职能不一样:TCP
是传输层协议,保证数据的可达性,也就是保证数据在网络中不会丢失。SSL
协议功能介于TCP
协议和应用层协议之间,是保证数据安全性的,有人认为应该归属于传输层,有人认为应该归属于会话层。
HTTPS
应用浏览器就是支持SSL
协议功能的实现者。利用HTTP
协议表示数据内容,利用SSL
协议保护数据安全,利用TCP
协议保证数据传输可达性。推荐阅读
- 网络协议|网络协议(扫盲再出发)
- 网络|计网-1.4 网络体系结构与协议分层
- 5G|5G 网络接口与基础流程
- 内网穿透|frp实现内网穿透
- 网络|Linux网络抓包分析工具
- 计算机网络|【计算机网络】TCP和UDP的特点及区别
- java|出现错误java:警告:源反行版 9,需要目标发行版1.9
- Netty学习系列|Netty学习六(编解码之粘包和拆包)
- websocket|C# WebSocket 通信-笔记