TLS简单理解


TLS的历史

From GTP3.5
TLS(传输层安全)是一种加密协议,旨在确保 Internet 通信的安全性和隐私保护。下面是 TLS 的历史概述:
SSL(安全套接层):TLS 的前身是 Netscape 公司在 1994 年推出的 SSL 协议。
SSL 1.0、2.0 和 3.0 逐渐发展,但 3.0 存在一些安全漏洞。 TLS 1.0:为了解决 SSL 3.0 的安全漏洞,1999 年发布了 TLS 1.0。TLS 1.0 安全性更高,
主要基于 SSL 3.0。这是第一个被冠以 “TLS” 名称的版本,但其实质上仍然是 SSL。
TLS 1.1:在 TLS 1.0 发布后的几年,一些安全漏洞被发现。为了修复这些漏洞,于2006年发布了 TLS 1.1。
TLS 1.1 取消了对一些旧有密码套件的支持,增加了对新的安全特性的支持。
TLS 1.2:2008 年发布了 TLS 1.2,这是一个重要的更新。TLS 1.2 引入了对新的密码套件的支持,提供更高的安全性和效率。
它还解决了一些与 TLS/SSL 相关的安全问题。
TLS 1.3:TLS 1.3 是 TLS 的最新版本,于2018 年发布。TLS 1.3 进一步提高了安全性和性能,并简化了握手协议。
它废除了一些不安全和不常用的特性,提供更快的连接速度和更好的安全性。 总的来说,TLS 的历史是从 SSL 逐渐演化而来的。每个版本都添加了新的特性和安全性改进,以适应互联网发展中的需求,并修复已知的安全漏洞。 TLS 1.3 是目前使用最广泛的版本,也是最安全和高效的版本。

加密套件

什么是加密套件?
  加密套件是用于在SSL / TLS握手期间协商安全设置的算法的组合。
在ClientHello和ServerHello消息交换之后,客户端发送优先级列表的密码支持套件。
然后,服务器使用从列表中选择的密码套件进行响应。 TLS算法组合:
在TLS中,5类算法组合在一起,称为一个CipherSuite: 认证算法
加密算法
消息认证码算法 简称MAC
密钥交换算法
密钥衍生算法 比较常见的算法组合是
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 和
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
都是ECDHE 做密钥交换,使用RSA做认证,SHA256做PRF算法。
一个使用AES128-CBC做加密算法,用HMAC做MAC。
一个使用AES128-GCM做加密算法,MAC由于GCM作为一种AEAD模式并不需要。

这里是一个加密套件的例子:

TLS _ECDHE_ RSA _ WITH_AES_128_GCM _ SHA256
  TLS是协议。从ECDHE开始,在握手期间,密钥将通过临时ECDHE进行交换。RSA是认证算法。
AES_128_GCM是批量加密算法。SHA-256是散列算法。
  大多数浏览器和服务器都有各自支持的密码套件列表,两者将在握手过程中进行优先顺序比较,以确定使用的安全设置。
  最后作为TLS 1.3最终版本,这一切都会改变。虽然以前SSL / TLS通过TLS 1.2版本是使用上诉描述的加密套件模板,
但1.3版本的加密套件将会有所改变,因为它们仅用于协商加密和HMAC算法。
  因为1.3加密套件的结构与之前的版本不同,所以它们与旧的TLS版本不能进行互换。
  密码是算法,用于加密和解密。它们可以是对称的或不对称的,这取决于它们支持的加密类型。
  加密套件是用于在SSL / TLS握手期间协商安全设置的密码的命名组合。在握手期间,
客户端和服务器交换密码套件的优先级列表,并决定两者最佳支持的套件。
  在TLS 1.3中,加密套件的结构将改变。 来源: https://blog.csdn.net/gx11251143/article/details/104360375

cipher-suite介绍


一些说明

TLS 1.2其实存在的问题也很多, 比如不支持前向加密.
所以微软其实对TLS1.2非常不热心.
2009年发布的win7和 Win2008r2 就不支持 TLS1.2 但是TLS1.3的发布比较优秀. 基本上解决了大部分的安全问题.
各大开源软件 基本上再2018年都大部分支持了 TLS1.3
但是微软应该不使用 开源的代码, 自己进行代码开发.
所以实际上他这边使用的是自己开发的代码.
也导致Winserver2019发布时依旧不支持 TLS1.3
直到2021年发布的 Win Server 2022才正式支持 TLS1.3

关于TLS与TCP和HTTPS

TLS是传输层协议,HTTPS是表示层的协议.
HTTPS是建立在TLS协议之上的.
TLS其实是在TCP协议之上的安全协议. TLS1.3时增加了很多特性, 比如0rtt等, 性能以及安全性都有了很大的提升.
HTTPS 其实需要借助于证书 才可以实现加密访问.
证书其实是证明网站身份的证明.
证书内有网站的信息.公钥信息,以及上级CA给的办法的签名信息. 客户端拿到证书后, 会有浏览器内嵌的CA证书的公钥进行验签, 验证证书的真伪
验证证书之后再拿到网站的公钥, 进行非对称加密发送客户端的一些密文等信息 需要注意 https 除了握手阶段, 数据流量其实都是对称加密的.

关于软件对TLS1.3的支持

JDK
JDK11 正式支持 TLS1.3
JDK8 需要在261的版本才兼容支持TLS1.3 Windows
Windows2022 才支持TLS1.3.
Win2012 开始支持TLS1.2 nginx 在2018年的版本基本上就支持了TLS1.3

关于工具

IISCrypto.exe

下载地址:
https://www.nartac.com/Downloads/IISCrypto/IISCrypto.exe 需要注意 这个软件名字很傻逼. 但是软件贼牛B 他其实是影响整个系统的设置, 不单独是修改 IIS的设置.. 他的修改会影响 远程桌面, 数据库建立安全链接. 以及软件的其他设置等等. 这个工具可以极大的提升操作系统的安全性. 但是建议在能够访问主机(BMC等方式)时进行使用 某些操作系统该了之后会导致 远程桌面失效.

Windows2008r2的TLS增强设置

1. 更新补丁:
Windows6.1-KB3020369-x64
这个补丁是前置补丁, 不更新没法更新第二个可以安装TLS1.2兼容支持的补丁. 2.Windows6.1-KB3042058-x64
这个补丁是给Windows2008r2 增加TLS1.2支持的补丁, 必须先更新前置补丁1 3. windows6.1-kb3172605-x64
这个补丁应该是增加几个强度高一些的加密套件. 4. windows6.1-kb3140245,windows6.1-kb3080079
注意必须更新完这几个补丁再进行 TLS1.2Only的设置. 不然mstsc远程桌面就会失败. 注意 WindowsXPsp3据说可以使用:
windowsxp-kb4019276-x86-embedded-chs
这个补丁来开启TLS1.2的支持.

一个想法

其实TLS的设置分为服务端和客户端的设置. 

服务端的设置 基本上是用来进行client/browser 和server的通信
而 client 的设置, 是用于应用服务器建立与第三方服务之间的请求. 根据安全性的差异, 其实服务器的服务端请求应该是 内网的. 我理解重要性要低于 他作为client的情景. client 一般都是要进行 对外部系统的服务与调用请求.
可能会涉及一些重要的加解密事项, 比如银企直联, 发票/OCR识别等等. 他的重要性其实更高, 并且难度相应的也更大.

TLS简单理解的更多相关文章

  1. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  2. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  3. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  4. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  5. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  6. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  7. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  8. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

  9. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  10. 简单理解JavaScript闭包

    很多关于JS的书籍例如<JavaScript权威指南>或者<高程>都把闭包解释的晦涩难懂,萌新们是怎么也看不懂啊!不过别怕,今天我就用很简单的方式给大家讲解下到底什么是闭包.这 ...

随机推荐

  1. Python——第二章:字符串操作——总结

    总结: f"{变量}"  格式化字符串最优方法 索引.切片.步长: 索引:从0开始计算的.[5] 切片:s[start: end: step],end位置的数据永远拿不到,左闭又开 ...

  2. kubernetes之部署springboot项目jar项目(三)

    kubernetes之部署war项目(三) k8s系列 源自我工作上的实际场景,记录于此. k8s部署springboot项目 假设我的jar项目是:myjar.jar 用到的环境 centos 7. ...

  3. UDP与KCP详解

    UDP 以及TCP是什么.我们知道传输层中有TCP和UDP两种网络协议,这节就讲UDP是什么. Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagr ...

  4. JavaImprove--Lesson03--String的工具类,Math,Runtime,BigDecimal,Date

    一String的工具类 String的作为字符串对象,也是使用最多的数据类型对象 所以难免有很多操作,字符串的常见操作包括:字符串拼接,字符串反转,字符串长度,字符串转换等 直接使用String类型来 ...

  5. POJ 2609 DP 双队列DP

    POJ 2609 DP 双队列DP 题意 给出队列容量与一组数,并且我们有两个这样容量的空队列,要求我们按照次序把数装进两个队列中,输出最多能装多少以及每个数装进哪个队列. 思路 由于按照次序来装,不 ...

  6. Nginx unexpected end of file 配置证书遇到问题,如何解决?

    原文链接 https://bysocket.com/nginx-unexpected-end-of-file-expecting-in-key-file/ 一.Nginx unexpected end ...

  7. 十八般武艺玩转GaussDB(DWS)性能调优(二):坏味道SQL识别

    摘要:那些会导致执行效率低下的SQL语句及其执行方式,我们称之为SQL中的"坏味道". ◆ 什么是SQL中的坏味道 SQL语言是关系型数据库(RDB)的标准语言,其作用是将使用者的 ...

  8. 测试攻城狮必备技能点!一文带你解读DevOps下的测试技术

    [摘要]本文将从DevOps模式下对测试人员的活动的变化,以及常用的测试技术层面进行解读. 项目的软件开发模式主要经历瀑布模型.敏捷开发和DevOps这几个阶段,其中DevOps主要解决开发和运维.运 ...

  9. Preload与Prefetch的区别以及webpack项目中如何优化

    preload 与prefetch 的区别 preload 是一个声明式 fetch,可以强制浏览器在不阻塞 document 的 onload 事件的情况下请求资源. preload 顾名思义就是一 ...

  10. Hive查看,删除分区

    查看所有分区 show partitions 表名; 删除一般会有两种方案 1.直接删除hdfs文件 亲测删除hdfs路径后 查看分区还是能看到此分区 可能会引起其他问题 此方法不建议 2. 使用删除 ...