TLS握手

http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

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的修订版

http://blog.csdn.net/fw0124/article/details/40983787

http://blog.csdn.net/liangyihuai/article/details/53098482

使用如下语法,过滤指定ip的通讯,以及协议类型

ssl and ip.dst== 24.105.29.76

ssl一共有11个步骤,但是区分双向认证和单向认证。

SSL/TLS握手过程可以分成两种类型:

1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书。
2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户端身份进行验证。

我们知道,握手过程实际上就是通信双方协商交换一个用于对称加密的密钥的过程,而且握手过程是明文的。


Client


Server

1 Client Hello  
 
2 Server Hello
3 certificate
4 (server_key_exchange)
5 (certificate_request)
6 server_hello_done

7 (certificate)
8 client_key_exchange
9 (certifiate_verify)
10 change_cypher_spec
----finished----
 
  11 change_cypher_spec
----finished----

下面是一个单向认证的截图,风暴英雄和服务器的数据交互

只找到了第一步到第十步,第十一步没有找到(5,7,9是跳过的)

4.1 客户端发出请求(ClientHello)

第一步  Client Hello

首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。

在这一步,客户端主要向服务器提供以下信息。

(1) 支持的协议版本,比如TLS 1.0版。  Version

Version: TLS 1.2 (0x0303)

(2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。 Random

这部分由时间和随机数组成。

Random: 5a18eca2df1b4246ec96ba558213d4eeeebf802a9e7e3470...
GMT Unix Time: Nov 25, 2017 12:08:02.000000000 China Standard Time
Random Bytes: df:1b:42:46:ec:96:ba:55:82:13:d4:ee:ee:bf:80:2a:9e:7e:34:70:38:00:76:56:f0:c5:f7:1a

(3) 支持的加密方法,比如RSA公钥加密。 Cipher Suites

Cipher Suites (30 suites)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
Cipher Suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x009f)
Cipher Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (0xc024)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
Cipher Suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039)
Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033)
Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256 (0x003d)
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)
Cipher Suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 (0x006a)
Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 (0x0040)
Cipher Suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA (0x0038)
Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032)
Cipher Suite: TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013)
Cipher Suite: TLS_RSA_WITH_RC4_128_SHA (0x0005)
Cipher Suite: TLS_RSA_WITH_RC4_128_MD5 (0x0004)

(4) 支持的压缩方法。CompressionMethod

Compression Methods (1 method)
Compression Method: null (0)

4.2 服务器回应(SeverHello)

第二步   Server Hello

服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。

服务器的回应包含以下内容。

(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

Version: TLS 1.2 (0x0303)

(2) 一个服务器生成的随机数,稍后用于生成"对话密钥"。

GMT Unix Time: Jan 11, 2050 11:55:48.000000000 China Standard Time
Random Bytes: 33:17:b7:9e:8d:37:b5:01:80:5c:f4:fc:3d:9f:de:1b:5d:86:11:cc:27:5e:ee:69:57:72:b3:97

(3) 确认使用的加密方法,比如RSA公钥加密。

Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)

(4) 服务器证书。

Compression Method: null (0)

第三步 Server Certificate

服务端将证书发送给客户端

有2个证书,分别来自Blizzard Entertainment, Inc.和DigiCert Inc

Certificate: 308205543082043ca00302010202100ebfca8ebf6dfa37ea... (id-at-commonName=*.battle.net,id-at-organizationName=Blizzard Entertainment, Inc.,id-at-localityName=Irvine,id-at-stateOrProvinceName=California,id-at-countryName=US)

Certificate: 308204b130820399a003020102021004e1e7a4dc5cf2f36d... (id-at-commonName=DigiCert SHA2 High Assurance Server CA,id-at-organizationalUnitName=www.digicert.com,id-at-organizationName=DigiCert Inc,id-at-countryName=US)

第四步 ServerKeyExchange

What‘s the purpose of Server Key Exchange when using Ephemeral Diffie-Hellman?

Diffie-Hellman(迪菲-赫尔曼)秘钥交换

In Diffie-Hellman, the client can‘t compute a premaster secret on its own;

both sides contribute to computing it, so the client needs to get a Diffie-Hellman public key from the server.

In ephemeral Diffie-Hellman, that public key isn‘t in the certificate (that‘s what ephemeral Diffie-Hellman means).

So the server has to send the client its ephemeral DH public key in a separate message so that the client can compute the premaster secret (remember, both parties need to know the premaster secret, because that‘s how they derive the master secret).

That message is the ServerKeyExchange.

EC Diffie-Hellman Server Params
Curve Type: named_curve (0x03)
Named Curve: secp256r1 (0x0017)
Pubkey Length: 65
Pubkey: 04906717d1ef4d3f55236b69f2bf9ebeaf73a3e2d53a2818...
Signature Hash Algorithm: 0x0201
Signature Hash Algorithm Hash: SHA1 (2)
Signature Hash Algorithm Signature: RSA (1)

第五步 Certificate Request[单向认证中没有这个]

第六步 Server Hello Done

4.3 客户端回应

客户端收到服务器回应以后,首先验证服务器证书。

如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务器的公钥。

然后,向服务器发送下面三项信息。

(1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。

(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

第七步   Client Certificate  单向认证中也没有这个

第八步 Client Key Exchange

时间: 2024-10-08 02:41:31

TLS握手的相关文章

SSL/TLS 握手优化详解

随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer Security),保证了传输层安全,同时也给 Web 性能优化带来新的挑战.上次写的「使用 BoringSSL 优化 HTTPS 加密算法选择」一文中,我介绍了如何针对不同平台启用最合适的传输加密算法.本篇文章我打算继续写 HTTPS 优化 -- TLS 握手优化. 先来补充一个小知识:SSL(S

TLS握手协议

SSL/TLS基础 SSL(Secure Sockets Layer 安全套接层),及其继任者-传输层安全(Transport Layer Security, TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层对网络连接进行加密.SSL技术最初是由浏览器开发商Netscape公司率先倡导的,开发过SSL3.0之前的版本.目前主导权已转移到IETF(Internet Engineering Task Force, Internet工程任务组)的手中. IETF以SSL3

[转帖]TLS握手:回顾1.2、迎接1.3

TLS握手:回顾1.2.迎接1.3 novsec2019-05-10共26541人围观 ,发现 2 个不明物体网络安全 *本文原创作者:novsec,本文属于FreeBuf原创奖励计划,未经许可禁止转载 https://www.freebuf.com/articles/network/202504.html 挺好的资料~ 先简单说明一下历史. 1994 NetScape SSL 1.0 未发布 1995 NetScape SSL 2.0 1996 SSL 3.0 1999 ISOC TLS 1.

使用Wireshark查看HTTPS中TLS握手过程

通过使用Wireshark抓包分析TLS握手的过程,可以更容易理解和验证TLS协议,本文将先介绍Wireshark解密HTTPS流量的方法,然后分别验证TLS握手过程和TLS会话恢复的过程. 一.使用Wireshark解密HTTPS流量的方法 TLS对传输数据进行了加密,直接使用Wireshark查看,TSL协议之上的协议细节(应用层 HTTP)完全看不到,因此需要解密后,才能查看.解密方法如下: 1.在Wireshark官网下载系统对应的Wireshark安装包,进行安装 2.增加系统环境变量

OpenVPN优化之-TLS握手控制通道的建立

关于OpenVPN数据通道的一次优化正在进行中,当我参考了"巨型帧"的概念和思想后,我仔细思考了TCP/IP协议栈的设计和实现,于是我得出了一个可能是错误但是起码在我的场景中很实用的结论:上层协议尽管把数据发出吧,不要管数据的大小,如果真的需要拆分,那就由下层来完成吧.       这个结论的一个反例就是TCP协议的数据分段,它感知了传输链路的MTU,也许在早期的网络中,IP分片重组确实影响了TCP的端到端流控和拥塞控制,也许还为状态防火墙带来了难题,但是现在不了,现在绝不再是这样了.

SSL/TLS 链接的建立/握手

HTTPS 即 HTTP-within-SSL/TLS,其中 SSL/TLS 又分别表示: SSL:Secure Sockets Layer TLS:Transport Layer Security SSL/TLS 建立链接及握手的过程为: SSL/TLS 建立链接及握手的示意图 阶段一 Client Hello 客户端向服务器发送 随机数 Random1 客户端支持的加密套件 Support Ciphers SSL 版本 Server Hello 服务器向客户端发送 从客户端发送加密套件列表中

HTTPS详解二:SSL / TLS 工作原理和详细握手过程

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧.还记得这张图吧. HTTPS 和 HTTP的区别 显然,HTTPS 相比 HTTP最大的不同就是多了一层 SSL (Secure Sockets Layer 安全套接层)或 TLS (Transp

SSL/TLS算法流程解析

SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住.本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获. 一.相关版本 Version Source Description   Browser Support SSL v2.0 Vendor Standard (from Netscape Corp.) [SSL2] First SSL protocol for which implementations exist - NS Navigator 1.x/2.x - MS

实现HTTPS系列第四弹之【TLS ,SSL等概念理解】

博文说明[前言]: 本文将通过个人口吻介绍TLS ,SSL,PKI等相关知识,在目前时间点[2017年5月21号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 1.第一弹:实现HTTPS系列第一弹之[http,https,www,web等概念简介] 博文链接:http://watchmen.blog.51cto.com/6091957/1922919 2.第二弹:实现HTTPS系列