第一讲.SSL握手协议的研究.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
 HYPERLINK /blog/600816 第一章. 对SSL的基本概念和框架的介绍  第二章.对SSL握手协议的研究(part-1)  HYPERLINK /topic/603895 第三章.对SSL握手协议的研究(part-2)  第四章.对SSL握手协议细节和实现的介绍 第五章.对SSL记录协议细节和实现的介绍 第六章.对SSL的安全性分析 第七章.举例一种将usbkey融入java JSSE框架的解决方案 SL握手过程即完成身份认证和建立加密通道的过程,分为四种。 ――Full Handshake : 全流程握手,C/S双方从无到有建立SSL连接; ――Resum session Handshake : C/S双方曾经建立过连接,但中途断了,SSL会话信息还有保留,只需要执行部分握手流程就可建立SSL连接; ――Server Re-negotiation Handshake : 已经建立了SSL连接,但server端为了某些原因(比如安全性)要求重新对密钥进行协商,也只需要执行部分握手流程; ――Client Re-negotiation Handshake : 已经建立SSL连接,但client端为了某些原因要求重新协商,只需执行部分握手流程。 Full Handshake 这里主要介绍全流程握手,握手步骤如下图所示,其他的握手过程都属于全流程的子集。 SSL握手协议总共有10中消息类型,类型名和枚举值如下: hello_request(0), client_hello(1), server_hello(2),certificate(11), server_key_exchange (12), certificate_request(13),server_done(14), certificate_verify(15), client_key_exchange(16),finished(20) ??? ?? 所有的握手消息有统一的结构: ? ? struct { HandshakeType msg_type; /* 握手消息类型,如上所述的枚举值 */ uint24 length; /* 握手消息体的长度用24位表示,即最大长度不超过16M*/ HandShakeMsg payload /*握手消息的有效荷载,上面列的10类型之一*/ } Handshake; ? Client Hello 阶段 客户端首先发 Client Hello消息到服务器端,服务器端收到hello消息后再发Server hello消息回应客户端。 Client Hello和Server Hello消息结构如下: ? ? struct { ProtocolVersion client_version; Random random; SessionID session_id; CipherSuite cipher_suites0..216-1; CompressionMethod compression_methods0..28-1; } ClientHello; struct { ProtocolVersion server_version; Random random; SessionID session_id; CipherSuite cipher_suite; CompressionMethod compression_method; } ServerHello;? 选择SSL通信,当底层连接建立好 后会触发或调用SSL的初始化和握手,握手由Clinet端发出Client Hello消息开始。 Client Hello 消息 ProtocolVersion:消息中协议版本是两个byte长度分别表示主次版本,如若在JAVA中初始化SSLContext时候选择了SSLv3则主版本号是3,次版本号为0,若选择了TLSv1(TLSv1相当SSLv3的升级版)则主版本号是3,次版本号是1。 Random:随机数结构,由两部分组成, ? struct { uint32 gmt_unix_time; opaque random_bytes[28]; } Random;? 一个4字节的系统当前时间,一个28位长的随机数,在后面计算所有消息的摘要或计算主密钥时候会用到。(疑惑1 : 在java的JSSE实现版本中貌似只有一个4字节的系统当前时间,没有28位的随机数,奇怪了,怎么和非JSSE 版本实现正确握手的啊… ) Session ID : SSL会话ID标识一次会话用,可以重用。会话ID都是由服务器分配因此在全流程握手中client

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档