转:SSL 握手协议详解
SSL 握手协议详解
RSA作为身份认证,ECDHE来交换加密密钥,AES/DES等作为加密。
如果RSA来加解密,那么身份认证后,直接用认证后的RSA公钥解密。不需要再额外交换加密密钥了。
相关报文:
|
报文类型 |
参数 |
|
hello_request |
空 |
|
client_hello |
版本、随机数、会话ID、密文族、压缩方法 |
|
server_hello |
版本、随机数、会话ID、密文族、压缩方法 |
|
certificate |
x.509V3证书链 |
|
server_key_exchange |
参数、签名 |
|
certificate_request |
类型、授权 |
|
server_done |
空 |
|
certificate_verify |
签名 |
|
client_key_exchange |
参数、签名 |
|
finished |
Hash值 |
A. 安全能力交换
建立的安全属性包括:协议版本、会话ID、密文族、压缩方法,同时生成并交换用于防止重放攻击的随机数。密文族参数包括密钥交换方法(Deffie-Hellman密钥交换算法、基于RSA的密钥交换和另一种实现在Fortezza chip上的密钥交换)、加密算法(AES,3DES、RC4、RC2、3DES等)、MAC算法(MD5或SHA-1)、加密类型(流或分组)等内容。
重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(FreshnessAttacks),是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。说白了就是黑客C在通信线路上进行信号采集,比如A发往B的。然后,黑客C将监听到的信息,再次发往B,这时B以为是A发过来的,所以就会误认为是A在和其进行通信。如果这些通信过程中,涉及到了账户信息,隐私,交易,黑客就会得到得到这些内容。
防止重放攻击:随机数是为了防止重放攻击。要求通信双方必须事先协商一个初始序列号,并协商递增方法,一般随机数。通信双方通过消息中的序列号来判断消息的新鲜性。并且通过以下带时间戳的提问与应答的方式。
(1.) 客户机向服务器发送client_hello报文,带随机数。SSL 客户端通过 Client Hello 消息将它支持的 SSL 版本、加密算法、密钥交换算法、MAC算法等信息发送给 SSL服务器。
(2.) 服务器向客户机回应server_hello报文带随机数。SSL 服务器发送服务端支持的 SSL 版本和加密套件,并通过 Server Hello消息通知给 SSL 客户端。
client:我想和你说悄悄话,我会的密钥交换算法有(ECDH,RSA等),加密算法有(AES,3DES、RC4、RC2、3DES等),摘要算法/MAC有(SHA,MD5)等。
Server:好的啊。我会的是这些。
Client hello 的内容
Server hello
B. 身份认证过程
(3.)在hello报文之后,如果服务器需要被认证,服务器通过SendCertificate将发送其证书。
(4.)客户端需要检查以下内容来完成对服务器的认证来得到服务器域名和公钥等:
时间是否在证书的合法期限内;
签发证书的机关是否客户端信任的;
签发证书的公钥是否符合签发者的数字签名;
证书中的服务器域名是否符合服务器自己真正的域名。
(5.)服务器要求客户端发送客户端自己的证书,Certificate Request。客户端发送自己的证书。ResponseCertificate.
(6.)收到后,服务器验证客户的证书来得到客户端的域名和公钥等,如果没有通过则结束。如第4步
Server:这是我的身份证书(里面有我的名字和公钥),你检查下啊(certificate )。暂时不需要重新请求客户证书,不过我也要确认是是否你(一般不确认)。
Client:这是我的签名,证书等,你检查下。
B. (加密算法确定)和密钥交换
如果加密算法采用RSA,那么不需要交换密钥了。如果是其他的,如AES,3DES等必须交换密钥。这个时候密钥交换一般是ECDHE等。以ECDHE为例子。
这个阶段是否还需要交换加密算法,我不确定。或许在第一阶段就确定了加密算法。假设加密算法是AES.
(7.)客户端生成一个随机数来生成PMS(Pre-master secret), 譬如ECDHE的A=a*G。并且用(8.) 服务端的RSA公钥加密传给服务端,服务端也生成一个随机数b,于是主密钥b*a*G。
(9.)服务端生成一个b来生成PMS(Pre-master secret) 譬如ECDHE的B=b*G。并且用客户端的RSA公钥加密传给客户端.
(10.)客户端收到B后,用自己的随机数a*B = a*b*G 得到主密钥。
Client:我们的暗号规则确定
Server:定为江湖规则1吧
Client:用这个(生成的随机数)去找到暗号的密码本吧
Server:生成随机数,发给客户端去找到暗号密码本
各自认证通过。
C. 握手结束,开始数据通信
Client:我给你发暗号了
Server:我给你会暗号了。
转:SSL 握手协议详解的更多相关文章
- SSL 握手协议详解
这里重点介绍一下服务端的验证和密钥交换.这个阶段的前面的(a)证书 和(b)服务器密钥交换是基于密钥交换方法的.而在SSL中密钥交换算法有6种:无效(没有密钥交换).RSA.匿名Diffie-Hell ...
- SSL/TLS协议详解(下)——TLS握手协议
本文转载自SSL/TLS协议详解(下)--TLS握手协议 导语 在博客系列的第2部分中,对证书颁发机构进行了深入的讨论.在这篇文章中,将会探索整个SSL/TLS握手过程,在此之前,先简述下最后这块内容 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html 分享到:8 发布时 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法
本文转载自SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法 导语 作为一名安全爱好者,我一向很喜欢SSL(目前是TLS)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...
- SSL/TLS协议详解(中)——证书颁发机构
本文转载自SSL/TLS协议详解(中)--证书颁发机构 导语 上一篇中,我们讨论了关于Diffie Hellman算法的SSL/TLS密钥交换.我们最终认为需要第三方来验证服务器的真实性,并提出了证书 ...
- SSL/TLS 协议详解
SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议.TLS ...
- SSL及GMVPN握手协议详解
之前写过一篇文章搞懂密码学基础及SSL/TLS协议,主要介绍了加密学的基础,并从整体上对SSL协议做了介绍.由于篇幅原因,SSL握手的详细流程没有深入介绍.本文将拆解握手流程,在消息级别对握手进行详细 ...
- SSL/TLS 握手过程详解
在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...
随机推荐
- Kettle(6.0) 参数方式连接数据库
数据库连接条件(视自己实际情况而定) 数据库: Oracle 主机名称(IP): localhost 或 127.0.0.1 数据库名称(SID):MYORCL 端口号: 1521 用户名: scot ...
- Java描述设计模式(17):调停者模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 在公司的日常安排中,通常划分多个部门,每个部门又会分为不同的小组,部门经理的一项核心工作就是协调部门小组之间的工作 ...
- python学习之【第九篇】:Python中的变量作用域
1.前言 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的. 2.变量作用域 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python的作 ...
- Servlet相关学习
Servlet入门解析 概念 运行在服务器端的小程序 servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则 实现servlet接口.复写方法 快速入门 创建web项目 ...
- LoadRunner具体流程
创建负载测试场景场景目标:模拟10个用户同时登陆.搜索航班.购买机票.查看航班路线并退出打开Controller并创建一个新场景1.打开HP LoadRunner2.打开Controller在Load ...
- My First Cloud Application's Design
Structure Diagram as following: Questions list: 1. Skydrive Integration > Based on the MSDN commu ...
- PHP 高级面试115题汇总(含答案)
1.给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形.勾股定理,矩形是对角线相等的四边形.只要任意三点不在一条直线上,任选一点,求 ...
- 为企业应用开发提速,写给企业IT部门的低代码开发基础知识
简介:应用程序开发长期以来一直是IT部门和业务部门面临的问题. IT部门总是被新的应用程序需求弄得不堪重负.他们不可能完成业务部门想要完成的每一个项目. 同时,业务部门的用户厌倦了等待,并开始完全绕过 ...
- spark集群搭建(三台虚拟机)——zookeeper集群搭建(3)
!!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...
- Python 常用模块系列(2)--time module and datatime module
import time print (help(time)) #time帮助文档 1. time模块--三种时间表现形式: 1° 时间戳--如:time.time() #从python创立以来,到当 ...