`

SSL交互和握手过程

阅读更多

SSL交互过程:

SSL消息按如下顺序发送:
1.Client Hello
    客户发送服务器信息,包括它所支持的密码组。密码组中有密码算法和钥匙大小;
2.Server Hello
    服务器选择客户和服务器都支持的密码组到客户。
3.Certificate
    服务器发送一个证书或一个证书链到客户端,一个证书链开始于服务器公共钥匙证书并结束于证明权威的根证书。这个消息是可选的,但服务器证书需要时,必须使用它。
4.Certificate request
    当服务器需要鉴别客户时,它发送一个证书请求到客户端。在网络程序中,这个消息很少发送。
5.Server key exchange
    服务器当发送来的公共钥匙对钥匙交换不是很充分时,发送一个服务器钥匙交换消息。
6.Server hello done
    服务器告诉客户完成它的初始化流通消息。
7.Certificate
    假如服务器需要一个客户证书时,客户端发送一个证书链。(只有在服务器需要客户证书时)
8.Client key exchange
    客户产生用于对称算法的一个钥匙。对RSA客户用服务器公共钥匙加密这个钥匙信息并把它送到服务器。
9.Certificate verify
    在网络程序中,这个消息很少发送,它主要是用来允许服务器结束对客户的鉴别处理。当用这个消息时,客户发送用密码函数的数字签名的信息到服务端,当服务端用公共钥匙解密这个消息时,服务器能够鉴别客户。
10.Change cipher spec
    客户发送一个消息告诉服务器改变加密模式。
11.Finished
    客户告诉服务器它已准备安全数据通信。
12.Change cipher spec
    服务器发送一个消息到客户端并告诉客户修改加密模式。
13.Finished
    服务器告诉客户端它已准备好安全数据通信。这是client-server握手协议最后一步。
14.Encrypted data
    客户同服务器用对称加密算法和密码函数,并用客户发送到服务器的秘密钥匙加密通信。

SSL握手过程:
摘录自《SSL与TLS》

目的:

1. 客户端与服务器需要就一组用于保护数据的算法达成一致;
2. 它们需要确立一组由那些算法所使用的加密密钥;

3. 握手还可以选择对客户端进行认证。


过程:

1. 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器;
2. 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
3. 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作pre_master_secret的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加/解密),并将加密后的信息发送给服务器;
4. 客户端与服务器端根据pre_master_secret以及客户端与服务器的随机数值独立计算出加密和MAC密钥(参考DH密钥交换算法)。
5. 客户端将所有握手消息的MAC值发送给服务器;
6. 服务器将所有握手消息的MAC值发送给客户端。


 
    第5与第6步用以防止握手本身遭受篡改。设想一个攻击者想要控制客户端与服务器所使用的算法。客户端提供多种算法的情况相当常见,某些强度弱而某些强度强,以便能够与仅支持弱强度算法的服务器进行通信。攻击者可以删除客户端在第1步所提供的所有高强度算法,于是就迫使服务器选择一种弱强度的算法。第5步与第6步的MAC交换就能阻止这种攻击,因为客户端的MAC是根据原始消息计算得出的,而服务器的MAC是根据攻击者修改过的消息计算得出的,这样经过检查就会发现不匹配。由于客户端与服务器所提供的随机数为密钥产生过程的输入,所以握手不会受到重放攻击的影响。这些消息是首个在新的加密算法与密钥下加密的消息。

    刚才所描述的每一步都需要通过一条或多条握手消息来实现。在此先简要地描述哪些消息与哪几步相对应,然后详细描述每条消息的内容。下图描述了各条消息:


 
    第1步对应一条单一的握手消息,ClientHello.
    第2步对应一系列SSL握手消息,服务器发送的第一条消息为ServerHello,其中包含了它所选择的算法,接着再在Certificate消息中发送其证书。最后,服务器发送ServerHelloDone消息以表示这一握手阶段的完成。需要ServerHelloDone的原因是一些更为复杂的握手变种还要在Certifacate之后发送其他一些消息。当客户端接收到ServerHelloDone消息时,它就知道不会再有其他类似的消息过来了,于是就可以继续它这一方的握手。
    第3步对应ClientKeyExchange消息。
    第5与第6步对应Finished消息。该消息是第一条使用刚刚磋商过的算法加以保护的消息。为了防止握手过程遭到篡改,该消息的内容是前一阶段所有握手消息的MAC值。然而,由于Finished消息是以磋商好的算法加以保护的,所以也要与新磋商的MAC密钥—起计算消息本身的MAc值。
    注意,上图中省略了两条ChangeCipherSpec消息。

SSL记录协议:
    在SSL中,实际的数据传输是使用SSL记录协议来实现的。SSL记录协议是通过将数据流分割成一系列的片段并加以传输来工作的,其中对每个片段单独进行保护和传输。在接收方,对每条记录单独进行解密和验证。这种方案使得数据一经准备好就可以从连接的一端传送到另一端,并在接收到的即刻加以处理。
    在传输片段之前,必须防止其遭到攻击。可以通过计算数据的MAC来提供完整性保护。MAC与片段一起进行传输,并由接收实现加以验证。将MAC附加到片段的尾部,并对数据与MAC整合在一起的内容进行加密,以形成经过加密的负载(Payload)。最后给负载装上头信息。头信息与经过加密的负载的连结称作记录(record),记录就是实际传输的内容。下图描述了传输过程:



 
    1. 记录头消息:
    记录头信息的工作就是为接收实现(receiving implementation)提供对记录进行解释所必需的信息。在实际应用中,它是指三种信息:内容类型、长度和SSL版本。长度字段可以让接收方知道他要从线路上这取多少字节才能对消息进行处理,版本号只是一项确保每一方使用所磋商的版本的冗余性检查。内容类型字段表示消息类型。

    2. SSL记录类型:
    SSL支持四种内容类型:application_data、alert、handshake和change_cipher_spec。
使用SSL的软件发送和接收的所有数据都是以application_data类型来发送的,其他三种内容类型用于对通信进行管理,如完成握手和报告错误等。
    内容类型alert主要用于报告各种类型的错误。大多数alert(警示)用于报告握手中出现的问题,但也有一些指示在对记录试图进行解密或认证时发生的错误,alert消息的其他用途是指示连接将要关闭。
    内容类型handshake用于承载握手消息。即便是最初形成连接的握手消息也是通过记录层以handshake类型的记录来承载的。由于加密密钥还未确立,这些初始的消息并未经过加密或认证,但是其他处理过程是一样的。有可能在现有的连接上初始化一次新的握手,在这种情况下,新的握手记录就像其他的数据一样,要经过加密和认证。
    change_cipher_spec消息表示记录加密及认证的改变。一旦握手商定了一组新的密钥,就发送change_cipher_spec来指示此刻将启用新的密钥。

各种消息协同工作:
    正如我们所看到的,SSL是一种分层协议,它以一个记录层以及记录层上承裁的个同消息类型组成。而该记录层又会由某种可靠的传输协议如TCP来承载。下图描述了该协以的结构:


 

一次ssl连接的完整过程:

  • 大小: 22 KB
  • 大小: 48.2 KB
  • 大小: 13.9 KB
  • 大小: 8.6 KB
  • 大小: 4.8 KB
分享到:
评论

相关推荐

    ssl 详解过程交互

    SSL(Secure Socket Layer)安全套接层协议是一种用于在客户端和服务器之间建立安全通信通道的协议,它由Netscape Communications公司于1995年首次提出。SSL协议利用公开密钥体制和X.509数字证书技术,确保信息传输...

    SSL连接建立过程分析

    在 SSL 连接建立过程中,应用程序需要与 SSL 库进行交互,以便实现安全的数据传输。应用程序接口的主要功能包括 SSL 初始化、建立 SSL 新连接、SSL 通信和 SSL 释放。 SSL 初始化是指应用程序在使用 SSL 库之前需要...

    ssl握手协议

    在 SSL 握手协议中,客户端和服务器之间进行了多次交互,以确保身份认证和加密通信的安全性。 SSL 握手协议的主要过程包括: 1. 客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的...

    ssl协议交互报文_webserver_源码

    - SSL/TLS协议的解析和实现,包括握手过程、密钥交换、加密和解密等。 - 证书的加载和验证逻辑。 - 加密库的集成和调用。 - 客户端和服务器之间的报文交互逻辑。 通过深入理解这些知识点,开发者可以更好地理解和...

    VC工程,ssl通讯socket,服务端和客户端,简单易懂。

    在本文中,我们将深入探讨如何使用Visual C++(VC)进行SSL通信,主要基于OpenSSL库来实现Socket服务器和...这个过程涉及了SSL的握手协议、证书管理和Socket编程,对于理解和实现安全的网络应用具有重要的实践价值。

    Android SSL证书验证原理

    本篇文章将深入探讨Android平台上的SSL证书验证原理,包括SSL证书交换流程、SSL握手与验证过程以及数字证书、公钥和密钥的管理。 #### 二、SSL证书交换流程 当Android应用尝试访问一个HTTPS站点时,会发起一个SSL...

    SSL服务器 客户端

    在"有SSL握手的服务器与客户端"这个压缩包文件中,可能包含了实现SSL服务器和客户端交互的代码示例或工具,供学习和分析SSL握手流程。通过研究这些资源,你可以更好地理解SSL协议的工作原理,以及如何在实际应用中...

    论文研究-基于SSL协议的可信应用及实现.pdf

    2. 改进握手协议:对SSL握手协议进行扩展,增加信任协商的消息类型和交互步骤。在握手阶段,除了现有的Client Hello、Server Hello等消息之外,还需要设计新的消息类型用于传输信任协商的相关信息。 3. 引入信任...

    ssl.zip_ssl_ssl linux

    6. **会话恢复与会话ID**:SSL支持会话缓存和会话ID,允许已经建立安全连接的客户端和服务器在后续交互中快速重用之前协商的参数,提高性能。 在Linux环境下,SSL协议通常通过OpenSSL库实现。OpenSSL提供了各种...

    ssl实例文件共享

    2. 握手过程:SSL连接的建立涉及一个四步握手过程,包括客户端发起请求、服务器发送证书、协商加密算法和设置会话密钥。 3. 加密技术:SSL使用非对称加密(如RSA)进行密钥交换,然后用对称加密(如AES)进行数据...

    wireshark ssl solution

    在Wireshark实验室中解决SSL问题,通常要求学习者使用Wireshark捕获和分析SSL握手过程中的数据包。SSL握手是SSL协议中关键的一个步骤,它在通信双方之间建立一个安全的通信通道。学习者需要理解SSL握手的各个阶段,...

    SSL证书在线生成系统源码

    当浏览器与服务器之间建立HTTPS连接时,会进行SSL握手,交换证书,验证服务器身份,并协商加密算法,确保通信的安全。 二、PKI原理 公钥基础设施(Public Key Infrastructure, PKI)是SSL证书的核心组成部分,包括...

    SSLClient端支持https协议

    接着,进行SSL连接的握手过程,包括发送和接收SSL握手消息,如ClientHello、ServerHello、证书、密钥交换等。这可以通过调用`SSL_connect()`完成。 在发送HTTPS请求时,使用`SSL_write()`将HTTP请求数据写入SSL连接...

    SSL 连接工具

    3. **握手过程**:SSL连接的建立涉及一个复杂的握手过程,包括客户端发起连接请求、服务器回应、交换证书、协商加密算法和建立会话密钥等步骤,这个过程确保了双方的安全连接。 4. **SecureCRT特性**: - **多窗口...

    Java ssl socket 双向认证

    5. **握手过程**:当Socket建立连接后,SSL/TLS会进行握手过程,互相交换证书并验证对方身份。 在`TestJava`这个示例中,可能包含了实现上述步骤的Java代码。代码可能涉及了`KeyStore`、`KeyManagerFactory`、`...

    Indy SSL支持库

    此外,理解SSL/TLS协议的工作原理,如握手过程、证书验证和密钥交换,也是至关重要的。对于遇到的问题,开发者可以通过查看更新包中的文档,或者在社区论坛和开发者资源中寻求帮助。 总之,Indy SSL支持库是开发...

    基于ssl的Java的socket网络通信

    开发者需要理解和配置SSLContext、KeyStore和TrustManager,以及进行SSL握手和正常的数据传输。在这个过程中,确保安全性和正确性是非常重要的,因为任何疏忽都可能导致安全隐患。在"safejoin"文件夹中的说明.txt...

    SSL.zip_ssl 书

    1. **握手协议**:这是SSL协议的启动阶段,客户端和服务器之间进行一系列的交互以协商加密算法、交换身份信息并建立共享密钥。握手协议包括客户端hello、服务器hello、证书、服务器key exchange、服务器hello done、...

    SSL双向认证SSL双向认证

    2. **握手过程**:SSL握手过程包括几个步骤:客户端发送加密套件的选择,服务器回应接受的套件并发送其证书,如果需要客户端认证,服务器会发送一个“证书请求”消息,客户端接着发送它的证书,然后双方交换预主密钥...

Global site tag (gtag.js) - Google Analytics