`
nil-zhang
  • 浏览: 51756 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SSL session resumption原理

    博客分类:
  • ssl
阅读更多

很多人熟悉HTTPS,却不知道SSL。HTTPS正是通过SSL和HTTP的组合来提供加密通讯以及对网络服务器身份的鉴别。SSL全称为 Secure Socket Layer,是一种在两台机器之间提供安全通道的协议。它具有保护传输数据以及识别通信机器的功能。客户与服务器之间的数据是经过加密的。SSL 假定其下层的数据包发送机制是可靠的。写入网络的数据将依顺序发送给另一端的程序,不会出现丢包或重传情况。依赖于可靠传输协议发送数据的特点使得SSL 只能在TCP 上工作,不能在UDP 或直接在IP 上运行。SSL 开始就是为Web 设计的,所以SSL可以很好地服务HTTP。SSL在协议栈中的位置如图1所示。

图1 SSL在协议栈中的位置

SSL 的连接分为两个阶段,即握手和数据传输阶段。握手阶段对服务器进行认证并确立用于保护数据传输的加密密钥。必须在传输任何应用数据之前完成握手。一旦握手完成,数据就被分成一系列经过保护的记录进行传输。

SSL 握手主要完成客户端与服务器约定加密算法、确立使用的加密密钥、还可以选择对客户端进行认证。不需要客户端认证的握手过程如图2所示。

图2 SSL握手过程

① SSL 客户端通过Client Hello 消息将它支持的SSL 版本、SessionID、加密套件、压缩算法等信息发送给SSL 服务器。

② SSL 服务器确定本次通信采用的SSL 版本、SessionID和加密套件,并通过Server Hello消息通知给SSL 客户端。

③ SSL 服务器将携带公钥信息的数字证书通过Certificate 消息发送给SSL客户端。

④ SSL 服务器发送Server Hello Done 消息,通知SSL 客户端版本和加密套件协商结束,开始进行密钥交换。

⑤ SSL 客户端验证SSL 服务器的证书合法后,利用证书中的公钥加密SSL 客户端随机生成的Pre_master secret,并通过Client Key Exchange 消息发送给SSL 服务器。

⑥ SSL 客户端发送Change Cipher Spec 消息,通知SSL 服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC 计算。

⑦ SSL 客户端计算已交互的握手消息的MAC 值,并通过Finished 消息发送给SSL 服务器。

⑧ 同样地,SSL 服务器发送Change Cipher Spec 消息,通知SSL 客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC 计算。

⑨ SSL 服务器计算已交互的握手消息的MAC,并通过Finished 消息发送给SSL 客户端。

整个SSL 握手的CPU和网络的开销都非常巨大,为了减少这种性能开销,SSL 提供了一种session resumption机制。如果客户端与服务器已经通信过一次,则它们就可以跳过整个握手阶段而直接进行数据传输。握手中开销最耗时的部分就是确立 Pre_master Secret,它要求使用公用密钥加密。而经过resumption的握手允许新的连接使用上一次握手中确立的Pre_master_secret。这就避免了公用密钥加密所需的计算开销。Session resumption过程如图3所示。

图3 SSL Session Resumption

当客户端与服务器第一次进行交互时,它们创建一个新的连接和一个新的session。如果服务器准备session resumption,就会在ServerHello 消息中给客户端一个SessionID,并将Master secret 缓存起来供以后引用。当这个客户端初始化一条与服务器的新连接时,它就会在其ClientHello 消息中使用SessionID。而服务器通过在其ServerHello 中使用相同的SessionID来同意session resumption。这样,服务器和客户端就会跳过余下的握手部分,而使用保存的Master secret来产生所有的加密密钥。

分享到:
评论

相关推荐

    nginx+tomcat+session+ssl_https+http

    包含了http的集群环境,https的集群环境,同时考虑到集群环境的session问题,使用了tomcat+memcached实现tomcat集群环境共享。整个环境解压既可以使用,证书如果需要修改,直接将证书放在nginx的config目录,然后...

    用jsse定制SSL

    1. **减少握手次数**:通过Session Resumption或Session Caching,可以避免每次连接都进行完整的SSL握手,提高性能。 2. **选择合适的加密算法**:合理选择加密套件,平衡安全性与性能。 **七、HTTPS服务器配置** ...

    linux网络编程之SSL

    通过缓存SSL对象、预共享密钥(PSK)、session resumption等技术,可以提高性能,降低资源消耗。 9. **安全性更新**:由于新的安全威胁不断出现,保持SSL库的更新至关重要。及时修复已知漏洞,避免使用易受攻击的...

    SSL及HTTPS协议_world_java_https客户端_ssl_distancemiy_

    - 性能优化:过多的SSL握手会增加延迟,可考虑使用Session Resumption或Session Caching来减少握手次数。 - 客户端身份验证:如果需要,服务器可以要求客户端提供证书进行双向认证。 总之,理解和使用Java中的SSL及...

    Indy SSL Lib For Delphi7 OpenSSL

    在设计应用程序时,可以考虑使用TLS session resumption、OCSP stapling等技术来优化性能。 6. **安全更新**:OpenSSL库历史上曾出现过著名的“心脏出血”漏洞,因此定期更新OpenSSL和Indy SSL库以修复安全漏洞至关...

    java ssl通讯程序

    SSL/TLS的加密和解密过程可能会对性能产生影响,因此可能需要优化,如使用硬件加速、调整缓冲区大小、启用 session resumption 等,以提高通信效率。 9. **SSL/TLS版本与加密套件选择**: 需要关注SSL/TLS协议的...

    tls.rar_ tls protocol_TLS_ssl_ssl/tls_tls pdf

    10. **性能优化**:在保证安全性的前提下,如何通过优化配置提高SSL/TLS连接的性能,例如使用session resumption和OCSP stapling等技术。 综上所述,这个"tls.pdf"文档很可能会深入探讨这些话题,对于理解SSL和TLS...

    Bulletproof SSL and TLS,PDF , Ivan Ristic

    Session Resumption 34 Key Exchange 35 RSA Key Exchange 38 Diffie-Hellman Key Exchange 38 Elliptic Curve Diffie-Hellman Key Exchange 40 iii Authentication 41 Encryption 42 Stream Encryption 42 Block ...

    基于Java的实例源码-SSL及HTTPS协议实例源码.zip

    可以通过优化SSL配置,如减少握手次数、启用 session resumption、选择高效的密码套件等方式提升性能。 7. 最新进展: Java的SSL/TLS支持随着版本更新不断加强,例如Java 8引入了TLSv1.3支持,提高了安全性并减少...

    LearnSSL:在这个项目中,我将学习 SSL 加密

    例如,启用HTTP/2协议,使用session resumption来减少握手开销,以及配置适当的缓存策略来存储会话信息。 在这个学习项目中,你可能会涉及到证书的创建和管理、服务器的配置、Java代码的编写,以及如何在Android...

    https协议读书笔记.zip

    5. 启用TLS session resumption和session caching,避免重复握手。 **总结** HTTPS协议通过SSL/TLS实现数据加密、身份验证和完整性校验,为互联网通信提供安全保障。理解并掌握HTTPS的工作原理,对于网络安全和...

    An Introduction to OpenSSL Programming Part 2

    在本篇文章中,我们将继续探讨OpenSSL编程的一些高级特性,包括会话恢复(session resumption)和客户端认证(client authentication)等。OpenSSL是一款基于SSL/TLS协议的强大加密工具库,它为开发人员提供了广泛的功能...

    HttpsClient.rar

    4. **会话终止**:当通信结束后,会话可能会被终止,或者通过会话重用技术(如Session ID或Session Resumption)节省资源。 在Java中,处理HTTPS请求通常涉及以下关键类和方法: 1. **`javax.net.ssl.SSLContext`*...

    https客户端、服务端代码样例

    3. 性能:SSL/TLS握手会增加延迟,因此在高并发场景下,可使用Session Resumption或Session Tickets来优化。 总结,HTTPS客户端和服务端的实现涉及到网络编程、加密算法、SSL/TLS协议和证书管理等多个方面。理解...

    [线上问题] “服务端长连接与客户端短连接引起Nginx产生大量\"TIME_WAIT\"状态的线程”的问题分析解决

    SSL是早期的加密协议,其session信息必须由服务端进行缓存和管理。这在客户端与服务器集群进行交互时,会因为session状态不一致导致效率下降。随着TLS协议的发展,提出了无状态的session重用机制。这种机制允许...

    openbsd-httpd-tls-config:完美的TLS SSL Labs的OpenBSD httpd配置得分A +

    7. **Session Resumption**:启用session resumption以提高性能,但要确保不牺牲安全性,例如通过使用安全的session ID存储机制。 8. **Ciphersuite排序**:将最安全的密码套件放在列表前面,这样客户端将优先尝试...

    9-2019051115-邓芷灵-HTTPS协议分析1

    8. **会话复用**:为了提高性能,SSL/TLS支持会话复用(Session Resumption)。一旦一个安全连接建立,客户端和服务器可以保存会话信息,以便下次连接时快速恢复,而无需重新进行完整的握手过程。 9. **Wireshark抓...

    https所用包

    为了优化性能,可以采用HTTP/2或HTTP/3协议(支持多路复用),使用TLS session resumption和session tickets减少握手次数,以及利用预共享密钥(PSK)等方式加速连接建立。 8. **代理和反向代理**:在某些网络环境...

    openssl-3.0.1

    6. **TLS Session Resumption**:利用TLS会话恢复机制,降低握手开销,提高连接速度。 OpenSSL 3.0.1的更新还包括对异步加密的支持,这允许其他操作在加密操作进行时并行处理,从而提高效率。同时,新的API设计更加...

    Java-Basico:https

    除了基础的HTTPS连接,Java还提供了更高级的安全特性,如Session Resumption(会话恢复)和Session Ticket,以优化性能并减少握手开销。另外,Java也支持HTTP/2协议,这是一种在HTTPS基础上构建的新一代HTTP协议,...

Global site tag (gtag.js) - Google Analytics