前言

体能状态先于精神状态,习惯先于决心,聚焦先于喜好

TLS 的基本介绍

TLS 的全称是 Transport Layer Security,从这个名字看我们可以认为它属于运输层

0.2、计算机网络-TLS 协议

TLS 主要用于 Https 协议中对Http 协议的加密

0.2、计算机网络-TLS 协议

RFC 2246

关于 TLS的RFC2246 文档地址为 http://www.rfc-editor.org/info/rfc2246

第一部分-关键术语

·XXX alert:各种各样的报错信息.
·cipher suites:加密规范,包含了交互的协议、key协商的非对称加密算法、大批量数据加密的对称加密算法、验签的散列算法,形式如TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.
·Key Exchange Algorithm:**交换算法,即公钥交换的方式,RSA、RSA_EXPORT、DHE_DSS、
DHE_DSS_EXPORT、DHE_RSA、DHE_RSA_EXPORT、DH_DSS、DH_RSA
·certificate:证书,可以由CA签发,或者自签发,证书需要有验签,证书提供的public key也需要有验签.
·key exchange method:由于TLS协议一般涉及大批量数据的对称加密,对称加密的key需要使用非对称加密方法在客户端和服务端之间进行协商,这就涉及到这个非对称的key如何交换.
·signing algorithm:验签算法,这里可以认为是摘要算法.
·Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法.
·PKIX:IETF的安全领域的公钥基础实施(PKIX)工作组正在为互联网上使用的公钥证书定义一系列的标准.
·digitalSignature bit:证书的数字签名位,当证书key使用扩展时,该位必须设置.
·keyEncipherment bit:证书的**加密位,当证书key使用扩展时,该位必须设置.
·keyAgreement bit:**协商位,当使用 Diffie-Hellman 类型证书时,这个位必须设置.

第二部分-分步描述

1、Hello request:

可由服务端在任意时间发送,通知客户端从新发起一个 Client hello,从新开始协商过程;
该消息允许客户端忽略或者 Client hello,或者 no_renegotation alert;
服务端在收到回复前,不会重复请求,直到握手协商结束,或以致命错误关闭此连接.

2、Client hello:

三种情况下客户端可能发送Client hello 消息:(1)当客户端第一次连接服务端时;(2)作为对服务端 Hello request 消息的回复;(3)客户端自发的向一个已存的连接从新发起安全协商.
Client hello 包含以下几个主要信息:(1)gmt_unix_time,当前系统时间(GMT19700101至今的秒数);(2)sessionID,32位,记录session,该值第一次为空,如果是重复访问可以不为空,服务端如果查询session缓存找到对应session 的话可以复用该 sessionID;(3)CipherSuites,加密套件,加密簇,加密规范,形式如TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ,不止一个,表示客户端支持的加密规范,包含了协议TLS,非对称加密算法,对称加密算法和散列算法的描述;按照客户端喜好程度从前往后排序.后面服务端会依据自己的情况综合选择一个cipher suite;(4)CompressionMethod:客户端支持的压缩算法列表,供服务端选择,可以为空.(5)random 一个随机数;(6)TLS协议版本,现在一般是TLS1.2或者TLS1.3;(7)其他很多信息,比如server_name,即域名,更多其他信息暂不介绍.

3、Server hello:

当服务端收到 Client hello 并且从自己的支持的 cipher suites 中匹配到客户端 Client hello 中提供的cipher spec的中的合适的一个(至少一个),服务端就会发送 Server hello,否则服务端会返回一个握手失败异常.
服务端包含的以下几个主要信息:(1)TLS版本,现在一般是tls1.2或者tls1.3;(2)random随机数,这个随机数和 Client hello中的random值不同;(3)SessionID,如果客户端Client hello中 SessionID不为空,且客户端session 缓存可以找到对应的sessionID,那么就使用客户端的值,否则就新生成一个SessionID,如果有其他策略比如客户端SessionID失效,那么服务端也会重新生成一个SessionID;(4)CipherSuite,加密规范,服务端从客户端提供的CioherSuites 中选择一个自己支持且认为性能最好的加密规范;(4)CompressionMethod,服务端从客服端提供的压缩算法中选择一个自己支持的压缩算法,可以为空.

4、Server certificate

只要 key exchange 方法不是匿名的,Server certificate 就应该在Server hello 消息之后被立即发送.
certificate 一般是一个 X.509v3 证书,证书类型必须满足之前选择的 key exchange算法;
如果没有特殊规定,证书的验签和证书的key的验签算法应该一样.

第三部分-一次完整的流程

相关文章:

  • 2022-01-19
  • 2021-07-15
  • 2021-08-14
  • 2021-04-23
  • 2021-10-11
  • 2021-05-26
  • 2021-08-01
  • 2021-06-17
猜你喜欢
  • 2021-09-12
  • 2022-03-07
  • 2022-02-08
  • 2021-12-04
相关资源
相似解决方案