博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络 https 握手
阅读量:4050 次
发布时间:2019-05-25

本文共 1814 字,大约阅读时间需要 6 分钟。

 

SSL握手大致过程:

  1. 客户端发送随机数1,支持的加密方法(如RSA公钥加密)
  2. 服务端发送随机数2,和服务器公钥,并确认加密方法
  3. 客户端发送用服务器公钥加密的随机数3
  4. 服务器用私钥解密这个随机数3,用加密方法计算生成对称加密的密钥给客户端,
  5. 接下来的报文都用双方协定好的加密方法和密钥,进行加密

SSL握手详细过程:

一、客户端发出加密通信请求ClientHello

提供: 

1,协议版本(如TSL1.0) 
2,随机数1(用于生成对话密钥) 
3,支持的加密方法(如RSA公钥加密) 
4,支持的压缩方法

二、服务器回应SeverHello

回应内容: 

1,确认使用的加密通信协议版本(TSL1.0) 
2,随机数2(用于生成对话密钥) 
3,确认加密方法(RSA) 
4,服务器证书(包含非对称加密的公钥) 
5,(可选)要求客户端提供证书的请求

三、客户端验证证书

如果证书不是可信机构颁布,或证书域名与实际域名不符,或者证书已经过期,就会向访问者显示一个警告,是否继续通信

四、客户端回应

证书没有问题,就会取出证书中的服务器公钥 

然后发送: 
1,随机数3(pre-master key,此随机数用服务器公钥加密,防止被窃听) 
2,编码改变通知(表示随后的信息都将用双方商定的方法和密钥发送) 
3,客户端握手结束通知

五、双方生成会话密钥

双方同时有了三个随机数,接着就用事先商定的加密方法,各自生成同一把“会话密钥” 

服务器端用自己的私钥(非对称加密的)获取第三个随机数,会计算生成本次所用的会话密钥(对称加密的密钥),如果前一步要求客户端证书,会在这一步验证

六、服务器最后响应

服务器生成会话密钥后,向客户端发送: 

1,编码改变通知(后面的信息都用双方的加密方法和密钥来发送) 
2,服务器握手结束通知

至此,握手阶段全部结束,接下来客户端与服务器进入加密通信,用会话密钥加密内容

 

 

 

密钥协商的步骤

  (下列步骤只阐述原理,具体的协议细节在下一篇讲)
1. 客户端连上服务端
2. 服务端发送 CA 证书给客户端
3. 客户端验证该证书的可靠性
4. 客户端从 CA 证书中取出公钥
5. 客户端生成一个随机密钥 k,并用这个公钥加密得到 k'
6. 客户端把 k' 发送给服务端
7. 服务端收到 k' 后用自己的私钥解密得到 k
8. 此时双方都得到了密钥 k,协商完成。
 

◇如何防范偷窥(嗅探)

  攻击方式1
  攻击者虽然可以监视网络流量并拿到公钥,但是【无法】通过公钥推算出私钥(这点由 RSA 算法保证)
  攻击方式2
  攻击者虽然可以监视网络流量并拿到 k',但是攻击者没有私钥,【无法解密】 k',因此也就无法得到 k
 

◇如何防范篡改(假冒身份)

  攻击方式1
  如果攻击者在第2步篡改数据,伪造了证书,那么客户端在第3步会发现(这点由证书体系保证)
  攻击方式2
  如果攻击者在第6步篡改数据,伪造了k',那么服务端收到假的k'之后,解密会失败(这点由 RSA 算法保证)。服务端就知道被攻击了。

 

=========================================

 

第一步 Client Hello

先看一下抓出来包的内容,我们直接看到SSL层

这一步干啥了呢?

  1. TLS的版本
  2. 随机数:这个是用来生成最后加密密钥的影响因子之一,包含两部分:时间戳(4-Bytes)和随机数(28-Bytes) 这个随机数,很重要。我们先记为Random1。
  3. session-id:用来表明一次会话,第一次建立没有。如果以前建立过,可以直接带过去。后面的扩展内容会详细讲到。
  4. 加密算法套装列表:客户端支持的加密-签名算法的列表,让服务器去选择。
  5. 压缩算法:似乎一般都不用
  6. 扩展字段:比如密码交换算法的参数、请求主机的名字等等

看一下第4点加密算法套装列表:客户端支持的加密-签名算法的列表有哪些

第二步 Server Hello (本例抓包占用了85字节,1360-85=剩余的1275字节为 被分段的Certificate部分)

包含三部分内容

  • 据客户端支持的SSL/TLS协议版本,确定使用的SSL/TLS协议版本
  • 确定加密套件,压缩算法
  • 产生了一个随机数Random2注意至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到

 

 

 

转载:

 

你可能感兴趣的文章
gstreamer相关工具集合
查看>>
RS232 四入四出模块控制代码
查看>>
linux 驱动开发 头文件
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>