[网络] SSL/TLS协议的原理机制

2024-06-10 07:48
文章标签 协议 原理 网络 机制 ssl tls

本文主要是介绍[网络] SSL/TLS协议的原理机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 概述
    • SSL/TLS的历史
    • 加解密的两种方法
    • SSL的基本工作原理
    • SSL协商对称密钥的过程
    • 小总结
    • SSL协商对称密钥的过程(进阶)
    • 最后总结

概述

我们每天都在使用互联网,所有数据都要通过计算机网络进行传输,网络本身只具备传输数据的能力,并不能保证数据的安全性。

数据在公共网络中移动的时候,很容易被第三方截获、篡改,造成信息泄漏、中间人攻击等各种网络安全性问题。

这就是计算机网络的真实情况,也是SSL/TLS协议诞生的背景!

要解决的问题:能够在不安全的网络环境中,安全的传输数据。

安全性体现在两个方面:

  1. 数据可以被截获,但是内容不能泄漏。
  2. 数据无法被篡改,一旦中途被篡改,客户端或者服务端拿到数据后立即就能发现。

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年,TLS升级到TLS 1.1版本。

2008年,TLS升级到TLS 1.2版本。

2011年,发布了TLS 1.2的修订版。

2014年提出TLS 1.3版本,直到2018年才正式纳入标准。

综上所述,SSLTLS就是同一个东西,因为历史版本原因,有了两个名字,可以认为TLSSSL的升级版。

但是更为常用的名字还是SSL,所以下文为了叙述方便,统一称为SSL协议。

加解密的两种方法

实现SSL协议的安全性,基本思路就是数据加密

从密码学原理来看,加解密需要密钥,具体方法可分为两种:

  1. 对称加密:加解密使用同一个密钥,这个密钥既能加密,又能解密。
  2. 非对称加密:加解密使用一对密钥,密钥分为公钥和私钥,公钥加密只有私钥能解,私钥加密只有公钥能解。

SSL就是基于这两种加密方法,完成数据安全性的保障,具体怎么运用的,继续看下文。

SSL的基本工作原理

先做一个约定:在网络通信过程中,发送数据的一方称为客户端,接收数据的一方称为服务端,从网络中窃取数据的一方称为第三者。

SSL协议会对原始数据进行对称加密,并传输数据,整个过程可分为三个步骤:

  1. 客户端和服务端在数据传输之前,会先协商出一个用于加解密数据的密钥,暂且就叫协商密钥;
  2. 客户端用这个协商密钥加密原始数据,然后把密文扔进网络中,传输给服务端;
  3. 服务端从网络中拿到密文后,再用相同的协商密钥解密,即可得到原始数据内容。

如果有第三者从网络中截获密文:

  1. 因为他没有对应的协商密钥,所以无法对密文进行解密,因此原始数据内容就不会泄漏;

  2. 如果他擅自修改密文,再继续传输给服务端,服务端用协商密钥解密就会出错,立刻就能察觉这份数据有问题!

此时,继续思考,应该会产生一个疑问,并且发现一个漏洞:

  1. 疑问:客户端和服务端之间是怎么协商出密钥的?
  2. 漏洞:第三者如果真有办法得到协商密钥,截获密文后就一定能解密并且伪造新密文,而且新密文能被服务端解密!这就出现了大问题,数据被篡改!!

如果能杜绝第三者获取协商密钥的办法,就不会再有这样一个漏洞。

如果搞清楚了对称密钥的协商过程,就会惊叹于它的设计逻辑,并且顿悟这样的逻辑就是杜绝第三者最好的手段。

SSL协商对称密钥的过程

这个协商过程就是SSL协议最核心也最关键的部分,理解了对称密钥的协商过程,也就真正理解了SSL协议的精髓和巧妙。

因为客户端和服务端之间的所有数据交互都是基于网络的,所以对称密钥的协商过程也是离不开网络的,不仅如此,协商过程几乎就是一个公开的明文传输过程!!

密钥协商过程中的所有元数据都能被第三者截获!也完全不怕被第三者截获!

客户端和服务端可以在第三者监视下协商出对称密钥,密钥还能不被第三方获取到,这就是SSL协议的巧妙之处!

具体协商过程要用到非对称加密方法,服务端提前在本地环境中生成非对称密钥,私钥自己保管好,公钥可以分发给任何人,包括客户端和第三者。

密钥协商过程的基本原理如下所述:

  1. 客户端通过网络索取服务端的公钥。
  2. 客户端自己随机生成一个对称密钥。
  3. 客户端将这个对称密钥用公钥加密,然后通过网络发送给服务端。
  4. 服务端拿到以后用私钥解密,就可以得到对称密钥。

公钥加密只有私钥能解,私钥只有服务端有,第三者即使截获到客户端的密文,也没有办法解密拿到其中的对称密钥。

小总结

至此,SSL协议工作原理机制就算是讲完了,稍微总结一下:

  1. SSL协议实现主要包含两种加密方法:对称加密,非对称加密。
  2. 非对称加密只用一次,在最开始协商对称密钥的时候,为了能安全传输对称密钥,防止对称密钥的泄漏。
  3. 对称加密可能会用很多次,这取决于客户端和服务端之间的数据传输量,很多时候数据需要拆分进行多次传输才能完成。
  4. 对称加解密的效率远高于非对称加解密,所以,两种加密方式结合使用,也是SSL协议在保障安全的前提下尽可能提高效率的办法。
  5. 如果不考虑效率问题,SSL协议完全可以有另外一种实现方案:通信过程全部采用非对称加密方式,客户端和服务端各自保管私钥,互换公钥,之后的过程使用非对称加密传递数据。

SSL协商对称密钥的过程(进阶)

文章上半部分是对SSL协议最基本的原理分析,下半部分详细讲述一下对称密钥的协商过程,属于原理进阶吧。

前面为了好理解,将对称密钥协商过程简单归纳如下:

  1. 客户端通过网络索取服务端的公钥。
  2. 客户端自己随机生成一个对称密钥。
  3. 客户端将这个对称密钥用公钥加密,然后通过网络发送给服务端。
  4. 服务端拿到以后用私钥解密,就可以得到对称密钥。

其实,这样说是不对的,真实原理过程比这复杂些~~~

真实协议中,协商对称密钥相对还是比较复杂的,实现方案从理论上讲不唯一,有多种理论参考模型,虽然模型逻辑可能有差异,但是目的都是为了保障网络数据的安全性。

SSL协议中,对称密钥协商过程叫做“握手阶段”,可类比传输层TCP协议的握手阶段,只不过TCP是三次握手,标准的SSL协议模型是四次握手。

第一次握手

客户端发出加密通信请求,称为ClientHello,提供以下一些信息:

  1. 客户端支持的协议版本,比如TLS 1.0版。
  2. 客户端生成一个随机数,稍后用于生成"对话密钥"。
  3. 客户端支持的对称加密方法,比如RSA公钥加密。
  4. 客户端支持的压缩方法。

第二次握手

服务端收到请求后回应数据,称为SeverHello,回应信息:

  1. 服务端确认使用的加密通信协议版本,比如TLS 1.0版本。如果没有匹配版本,服务端关闭加密通信。
  2. 服务端生成的一个随机数,稍后用于生成"对话密钥"。
  3. 确认使用的加密方法,比如RSA公钥加密。
  4. 服务端数字证书,证书里面包含服务端基本信息以及公钥。

数字证书可以通过各种途径自己生成,但是这样的证书没有社会公信力,还是容易被第三方冒名顶替。

正确的做法是,拿着自己的基本信息和公钥去找权威证书颁发结构,也就是常说的CA机构,从他们哪里获取具有公信力的证书。

CA机构会用自己的私钥对证书进行签名,所以这样的证书是无法被篡改的,也能得到所有客户端的认可和校验。

第三次握手

客户端收到响应信息后,首先要验证服务端数字证书,如果证书颁布机构不可信、或者证书中包含的基本信息与服务端不一致、又或者证书已经失效,就会告知当前用户,询问用户是否还要继续通信。

如果数字证书验证通过,或者用户人为选择继续通信,客户端就从证书中提取服务端公钥,并向服务端再次发送信息:

  1. 再次生成一个新的随机数,用服务端公钥加密。
  2. 客户端加密方法变更通知,表示随后信息都将用双方协商的加密方法和对称密钥发送。
  3. 服务端握手结束通知,表示服务端的握手阶段结束。这一项同时也是前面发送的所有内容的hash值,用来供服务端校验。

第四次握手

注意前面握手阶段提到的随机数,到目前为止,双方都掌握了三个随机数。

两个由客户端生成,一个明文传输给服务端,一个用服务端公钥加密后传输给服务端。

一个由服务端生成,明文传输给客户端。

确定好这三个随机数,客户端和服务端就可以在各自的本地环境中,根据密钥生成器生成对称密钥。数学原理可以保证客户端和服务端生成的密钥是一样的,并且,该密钥无需再次经过网络传输,可以有效避免对称密钥的泄漏问题!

因为第三个随机数是用公钥加密传输的,第三方无法解开,所以,即使第三方截取到另外两个随机数,也不可能根据密钥生成器生成协商出来的对称密钥!

因此,对称密钥就在不安全的网络环境中,安全的产生了。

服务端验证客户端的hash值,并生成对称密钥以后,返回客户端响应信息:

  1. 服务端传输加密方式变更通知,表示随后信息都将用双方协商的加密方法和对称密钥发送。
  2. 服务端握手结束通知,表示服务端握手阶段结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

客户端收到响应以后,校验服务端hash正确以后,就表示四次握手阶段全部完成。

再往后就是用对称密钥加密传输应用层协议数据了。

最后总结

SSL协议保障数据安全分两个阶段:

  1. 利用非对称加密原理构建出通信双方的对称加解密密钥,这个对称密钥在很多地方也叫做“会话密钥”。
  2. 利用对称加密方法保护应用层协议数据,提高通信效率。

需要明白的是,整个通信过程都能被第三方监听到,但是只要服务端保护好自己的私钥,就能保护好对称密钥不被第三方获取,进而保证关键的通信数据不能被第三方解密。

这就是SSL协议精彩的地方!能够在不安全的环境中建立起安全的通信机制。

不要把SSL协议和TCP协议混为一谈,他们的地位职能不一样:

  1. TCP是传输层协议,保证数据的可达性,也就是保证数据在网络中不会丢失。
  2. SSL协议功能介于TCP协议和应用层协议之间,是保证数据安全性的,有人认为应该归属于传输层,有人认为应该归属于会话层。

最常见的HTTPS应用浏览器就是支持SSL协议功能的实现者。利用HTTP协议表示数据内容,利用SSL协议保护数据安全,利用TCP协议保证数据传输可达性。

这篇关于[网络] SSL/TLS协议的原理机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047568

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分