SSL双向握手/RSA与ECDHE

这篇具有很好参考价值的文章主要介绍了SSL双向握手/RSA与ECDHE。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、SSL双向握手的每一阶段都做了什么(以RSA算法为例)

(一)第一阶段:Client Hello数据包(客户端->服务端)

SSL双向握手整体流程如下图:

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

Client hello数据包是客户端向服务端发送的初始消息,是SSL双向握手的开始,用来请求建立安全通信信道。该数据包主要包含如下信息:

SSL/TLS 版本:指示客户端支持的最高和最低协议版本。这两个版本号用于在服务器选择协议版本时提供一个范围。(不是把客户端支持的所有版本都列出来

随机数:客户端生成一个随机数,占据32字节,由两部分组成(Unix 时间戳随机字节),包含在 "Client Hello" 消息中。这个随机数在后续用于生成会话密钥、初始化向量生成、非对称密钥交换以及数据完整性保护。

加密算法列表:客户端列出了其支持的加密算法和压缩方法。服务器将从这个列表中选择合适的加密算法和压缩方法。

会话恢复(可选):如果客户端之前与同一服务器建立过 SSL/TLS 会话,并希望重用会话密钥以实现会话恢复(Session Resumption),则可以在 "Client Hello" 中包含会话标识(Session ID)。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

(二)第二阶段:Server hello数据包(服务端->客户端)

"Server Hello"是服务器对客户端的"Client Hello"消息作出的响应。在"Server Hello"阶段,服务器选择一个加密套件(Cipher Suite)并协商会话参数,然后向客户端发送包含这些信息的消息。"Server Hello" 消息的主要内容包括:

协议版本号:服务器选择的 SSL/TLS 协议版本号,通常是客户端提供的版本范围内的一个值。

随机数:服务器生成的随机数,用于生成会话密钥、初始化向量生成、非对称密钥交换以及数据完整性保护。

加密套件:服务器从客户端提供的加密套件列表中选择一个支持的加密套件,用于后续的加密和解密操作。加密套件包括加密算法、密钥交换算法等。

压缩方法:服务器从客户端提供的压缩方法列表中选择一个支持的压缩方法,用于后续的数据传输。

会话 ID:如果客户端在 "Client Hello" 中提供了会话 ID,服务器可以选择重用之前的会话状态。在这种情况下,服务器会在 "Server Hello" 中包含相应的会话 ID。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

(三)第三阶段:Certificate、Certificate Request、Server HelloDone数据包(服务端->客户端)

1.Certificate数据包

Server Certificate(服务器证书):服务器向客户端发送服务端的数字证书,证书中包含服务器的公钥。该证书由一个受信任的证书颁发机构(CA)签名,用于验证服务器的身份

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

2.Certificate Request数据包

Certificate Request(客户端证书请求):服务器向客户端发送一个消息,请求客户端提供客户端的数字证书,以便服务器能够验证客户端的身份。通常分为两种使用情况:

双向认证:服务器需要验证客户端的身份,以确保客户端是合法的。

客户端证书认证:服务器希望获取客户端的证书,以便在后续通信中使用客户端的公钥进行加密。(客户端可以选择提供证书以进行身份验证,或者忽略 "Certificate Request" 阶段,继续后续的握手过程。

"Certificate Request" 消息的内容通常包括:

证书类型列表:服务器列出所支持的证书类型,例如 RSA、DSA、ECDSA 等。

摘要算法列表:服务器列出所支持的摘要算法,用于数字签名验证。

可选的 CA 名单:服务器发送一个包含可接受的证书颁发机构(Certificate Authorities,简称CAs)列表的消息,客户端需要从中选择一个合适的数字证书来响应请求。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

3.Server Hello Done数据包

"Server Hello Done" 数据包是服务器在发送完"Server Hello"消息后,向客户端发送的一个空消息,用于通知客户端服务器已完成"Server Hello"阶段,并且客户端可以继续握手的下一个步骤。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

(四)Certificate、Client Key Exchange、Certificate Verify数据包(客户端->服务端)

1.Certificate数据包

Client Certificate(客户端证书):客户端向服务器发送客户端的数字证书,证书中包含客户端的公钥。该证书由一个受信任的证书颁发机构(CA)签名,用于验证客户端的身份。客户端Certificate数据包的作用有:

身份验证:客户端在 "Certificate" 数据包中包含自己的数字证书,以便服务端验证客户端的身份。数字证书由证书颁发机构(CA)签发,包含了客户端的公钥其他身份信息。服务端可以使用该证书来确认客户端的合法性和真实性。

密钥交换:在某些加密算法中,客户端的数字证书也可以用于密钥交换。例如,在使用基于证书的身份验证的协议(如TLS-RSA和TLS-DHE-RSA)中,服务端的数字证书会包含一个公钥,服客户端可以使用这个公钥来交换临时密钥,用于后续通信的加密。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

2.Client Key Exchange数据包

"Client Key Exchange" 数据包用于进行密钥交换。这个数据包包含了客户端生成的临时密钥,用于后续通信的加密和解密。"Client Key Exchange" 数据包的内容取决于所使用的密钥交换算法和加密套件。

在使用RSA密钥交换的情况下,"Client Key Exchange" 会生成第三个随机数(预主密钥)使用服务端公钥加密预主密钥,发送给服务端。这样,服务端接受到后,就可以使用自己的私钥解密并获取临时密钥。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

3.Certificate Verify数据包

"Certificate Verify" 数据包用于客户端对给服务端发送的所有握手消息进行数字签名,以证明其拥有客户端的私钥。通过这个数字签名,客户端向服务器证明自己的身份和能力,同时确保握手过程的安全性。

"Certificate Verify" 数据包中包含以下内容:

Signature Algorithm(签名算法):指示用于生成数字签名的算法类型。

Signature(数字签名):这是客户端对握手过程中之前交换的所有数据进行签名的结果。签名是使用客户端的私钥生成的,以证明客户端对其证书的控制权。签名包括握手消息的摘要(通常是SHA-256或其他哈希算法的结果),并使用客户端的私钥进行加密。服务器将使用客户端的证书中的公钥来验证签名的有效性。

Hash Algorithm(哈希算法):指示用于生成消息摘要的哈希算法。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

(五)第五阶段:Change Cipher Spec、Encrypted Handshake Message数据包(客户端->服务端)

1.Change Cipher Spec数据包

"Change Cipher Spec" 数据包用于通知接收方在此之后的通信将使用新的加密参数(主密钥)。它是一种非常简单的协议消息,本身不携带任何额外的数据,仅包含一个字节的数值,表示切换到加密状态。

具体来说,"Change Cipher Spec" 数据包的作用如下:

切换加密状态:在握手过程中,双方会协商加密参数,包括加密算法、密钥等。当握手阶段完成后,通过发送 "Change Cipher Spec" 数据包,发送方通知接收方开始使用协商好的加密参数进行数据加密和解密。

握手完成标志:在握手过程的最后,发送 "Change Cipher Spec" 数据包也可以作为握手完成的标志。一旦接收到这个消息,双方都知道握手已经成功完成,加密通信状态已经建立。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

2.Encrypted Handshake Message数据包

“Encrypted Handshake Message”数据包:客户端将要发送给服务端的握手消息(在通信双方之间协商参数、进行身份验证、建立安全通道的一系列消息),使用主密钥进行加密,生成 "Encrypted Handshake Message" 数据包。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

(六)第六阶段:Change Cipher Spec、Encrypted Handshake Message数据包(服务端->客户端)

1.Change Cipher Spec数据包

与客户端向服务端发送的"Change Cipher Spec" 数据包作用相同,告知客户端服务端已经生成了主密钥,接下来使用新的加密参数(主密钥)进行通信。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

2.Encrypted Handshake Message数据包

“Encrypted Handshake Message”数据包:服务端使用主密钥加密的第一个数据,发送给客户端,客户端使用此消息来验证自身主密钥的正确性。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

(七)第七阶段:加密通信

握手完成后,双方使用加密信道开始通信。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

二、阐述RSA与ECDHE握手中的密钥产生区别

首先分别说明一下RSA和ECDHE的握手流程:

(一)RSA握手流程

1. 客户端Hello:客户端向服务器发送一个随机数,支持的加密套件列表,以及其他的握手信息。

2. 服务器Hello:服务器从客户端提供的加密套件列表中选择一个,并发送自己的证书、一个随机数,以及支持的加密算法和版本。

3. 服务器Key Exchange(可选):如果服务器的证书要求客户端提供一个预主密钥,服务器将发送 "Server Key Exchange" 消息,其中可能包含RSA的公钥(用于加密预主密钥)。

4. 证书请求(可选):如果服务器需要客户端提供证书以进行身份验证,服务器会发送 "Certificate Request" 消息。

5. 服务器Hello Done:服务器通知握手消息的结束,等待客户端响应。

6. 客户端证书和Key Exchange:如果服务器要求,客户端将发送其数字证书以进行身份验证。同时,客户端生成一个随机的Pre-Master Secret,并使用服务器的RSA公钥加密,然后发送给服务器。

7. 握手完成:双方交换 "Change Cipher Spec" 和 "Finished" 消息,表示握手成功完成,通信将切换到加密模式。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

(二)ECDHE握手流程

1. 客户端Hello:客户端向服务器发送一个随机数,支持的加密套件列表,以及其他的握手信息。

2. 服务器Hello:服务器从客户端提供的加密套件列表中选择一个,并发送自己的证书、一个随机数,以及支持的加密算法和版本。

3. 服务器Key Exchange(Ephemeral公钥):服务器生成一个临时的椭圆曲线密钥对,将公钥发送给客户端。

4. 服务器Hello Done:服务器通知握手消息的结束,等待客户端响应。

5. 客户端Key Exchange(Ephemeral公钥):客户端也生成一个临时的椭圆曲线密钥对,将公钥发送给服务器。

6. 握手完成:双方交换 "Change Cipher Spec" 和 "Finished" 消息,表示握手成功完成,通信将切换到加密模式。

SSL双向握手/RSA与ECDHE,网络,ssl,网络协议,wireshark,https

最后,以上是我个人对RSA握手流程的理解,如果有不对的地方敬请批评指正。

网络方面的知识推荐小林coding的图解网络,不论是学习还是面试准备都很有用!文章来源地址https://www.toymoban.com/news/detail-794705.html

到了这里,关于SSL双向握手/RSA与ECDHE的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

    【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

    TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时,需要进行三次握手,防止因为网络延迟、拥塞等原因导致的数据丢失或错误传输,确保双方都能够正常通信。 TCP三次握手在Wireshark数据包中是如何体现的?在此之前,先熟悉TCP三次握手的流程。

    2024年02月03日
    浏览(12)
  • OkHttp网络框架深入理解-SSL握手与加密

    OkHttp网络框架深入理解-SSL握手与加密

    由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。 特点: 支持HTTP/2并允许对同一主机的所有请求共享一个套接字 通过连接池,减少了请求延迟 默认通过GZip压缩数据 响应缓存,避免了

    2024年02月08日
    浏览(12)
  • c++使用OpenSSL基于socket实现tcp双向认证ssl(使用TSL协议)代码实现

    c++使用OpenSSL基于socket实现tcp双向认证ssl(使用TSL协议)代码实现

    相信各位对OpenSSL库已经不陌生了,目前笔者使用这个库实现了RSA、AES加解密和tcp的双向认证功能,下面来看tcp的双向认证。 简单说双向认证就是:客户端认证服务端是否合法,服务端认证客户端是否合法 。 可以借助于HTTPS来说明,http网络传输协议是超文本的明文协议,也就

    2024年02月06日
    浏览(25)
  • 为什么SSL会握手失败?SSL握手失败原因及解决方案

    为什么SSL会握手失败?SSL握手失败原因及解决方案

    随着网络安全技术的发展,SSL证书作为网站数据安全的第一道防线,被越来越多的企业选择。SSL证书使用的是SSL协议,而SSL握手是SSL协议当中最重要的一部分。当部署SSL证书时,如果服务器和客户端之间无法建立安全连接,就会发生SSL握手失败的情况。本文将为您解释导致

    2024年02月21日
    浏览(11)
  • SSL握手失败怎么解决

    有时候我们会遇到无法在服务器和客户端之间建立安全连接,会发生SSL(安全套接字层)握手失败的情况。对于不熟悉该技术的人来说,术语“SSL 握手”可能显得神秘或断章取意。如果您处于这种情况并且需要弄清楚为什么这个问题会出现在您的PC 上,本文将教你如何解决这

    2024年02月04日
    浏览(12)
  • 网络安全协议之比较(SSH、PKI、SET、SSL)

    一、SSH介绍  什么是SSH?  传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据, 别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(

    2024年02月15日
    浏览(12)
  • SSL协议是什么?关于SSL和TLS的常见问题解答,被面试官问的网络安全问题难倒了

    SSL协议是什么?关于SSL和TLS的常见问题解答,被面试官问的网络安全问题难倒了

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新网络安全全套学习资料》

    2024年04月22日
    浏览(15)
  • 常见网络通信协议(http、https、ws)及安全协议(SSL、TLS、XTLS)

    常见网络通信协议(http、https、ws)及安全协议(SSL、TLS、XTLS)

    文章内容删除了一大半不合适的内容,发不出来,你懂得。🥰 HTTP和HTTPS都属于 应用层协议 ,它们都是用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议。它们都是 基于 TCP/IP 协议 来传递数据的,支持 客户端-服务器模式 的通信。 HTTP和HTTPS的区别主要在于HTT

    2024年02月10日
    浏览(16)
  • https 中 ssl/tls 的握手

    如果使用了 https 协议,那么在建立 tcp 连接之后,还会进行 tls 握手。也就是 https 的证书验证和密钥传输的过程。简化的流程如下: 客户端发送请求 服务端返回证书 客户端验证证书,提取公钥,生成对称加密的密钥,用公钥加密后发送给服务端 服务端收到请求,用私钥揭秘

    2024年01月23日
    浏览(10)
  • 关于网络通信安全协议的一些知识(ssl,tls,CA,https)

    首先了解一下http协议的变迁。 http1.0默认短连接,1.1默认长连接并且可以管道传输,但是存在队头阻塞问题; https就是在tcp和http之间加了SSL/TLS层。 http2也是安全的,改进是hpack二进制和编码压缩减小体积,stream没有队头阻塞了(TCP层还有),以及服务器主动推送功能; http

    2024年02月15日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包