TLS简单理解

发布时间 2024-01-05 09:16:28作者: 济南小老虎

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识别等等. 

他的重要性其实更高, 并且难度相应的也更大.