SSL/TLS握手过程可以分成两种类型:

1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书。

2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户端身份进行验证。

我们知道,握手过程实际上就是通信双方协商交换一个用于对称加密的密钥的过程,而且握手过程是明文的。

这个过程实际上产生三个随机数:client random, server random, pre-master secret. 参考图解SSL/TLS协议 .

前两个随机数都是明文传送的,只有pre-master secret是加密的(RSA或者DH)。

一般生成证书的时候,签名算法可以选择RSA或者DSA算法。

如果server使用RSA证书,RSA即可以用作签名也可以用作不对称加密,pre-master secret就是用server的RSA证书中包含的公钥加密的。

如果server使用DSA证书,DSA只能用作签名,所以还需要使用DH算法来交换密钥。

以下是其流程图(摘自rfc5246),括号中的步骤是可选的。

如果是单向认证,那么蓝色字体部分是不需要的。

4 server_key_exchange这一步只有在选择了某些密钥交换算法例如DH算法的时候才需要。

Client

Server

1 Client Hello

2 Server Hello

3 certificate

4 (server_key_exchange)

5 (certificate_request)

6 server_hello_done

7 (certificate)

8 client_key_exchange

9 (certifiate_verify)

10 change_cypher_spec

----finished----

11 change_cypher_spec

----finished----

下面使用wireshark抓取握手过程的报文。server/client使用JAVA7/JSSE编码。

server证书签名算法RSA-双向认证

可见包括了除了4以外的所有步骤。因为采取了RSA算法,所以步骤4是不需要的。

(一) 首先,客户端向服务器提供以下信息

client_hello(1)支持的协议版本,比如TLS 1.0

(2)支持的加密算法(Cipher Specs)

(3)客户端生成的随机数1(Challenge),稍后用于生成"对话密钥"。

(二)服务器回答给客户端以下信息

server_hello(1) 确认使用的协议版本

(2) 服务器生成的随机数2,稍后用于生成"对话密钥"

(3) session id

(4) 确认使用的加密算法

certificate服务器证书

server_key_exchange如果是DH算法,这里发送服务器使用的DH参数。RSA算法不需要这一步。

certificate_request要求客户端提供证书,包括

(1) 客户端可以提供的证书类型

(2)服务器接受的证书distinguished name列表,可以是root CA或者subordinate CA。如果服务器配置了trust keystore, 这里会列出所有在trust keystore中的证书的distinguished name。

server_hello_doneserver hello结束

(三)客户端发送给服务器

certificate客户端证书

client_key_exchange包含pre-master secret。客户端生成第三个随机数。如果是采用RSA算法,会生成一个48字节随机数,然后用server的公钥加密之后再放入报文中;如果是DH算法,这里发送的就是客户端的DH参数,之后服务器和客户端根据DH算法,各自计算出相同的pre-master secret。

certificate_verify发送使用客户端证书给到这一步为止收到和发送的所有握手消息签名结果。

change_cipher_spec客户端通知服务器开始使用加密方式发送报文。客户端使用上面的3个随机数client random, server random, pre-master secret, 计算出48字节的master secret, 这个就是对称加密算法的密钥。

finished客户端发送第一个加密报文。使用HMAC算法计算收到和发送的所有握手消息的摘要,然后通过RFC5246中定义的一个伪函数PRF计算出结果,加密后发送。

(四) 服务器发送给客户端

服务器端发送change_cipher_spec和finished消息。到这里握手结束。

server证书签名算法DSA-双向认证

下面是一个server证书采用DSA算法的握手过程。由于采用了DH算法交换密钥,多了server_key_exchange这一步。

server证书签名算法RSA-单向认证

和双向认证相比,server端少了certificate_request,client端少了certificate 和 certificate_verify。

SSL/TLS 握手过程详解

在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...

SSL/TLS握手过程

----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS ...

SSL/TSL握手过程详解

1. Client Hello 握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1.客户端支持的加密套件(Support Ciphe ...

抓包分析SSL/TLS连接建立过程【总结】

1.前言 最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下.开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来 ...

SSL/TLS 握手优化详解

随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer ...

HTTPS中SSL/TLS握手时的私钥用途(RSA、ECDHE)

从上一篇HTTPS中CA证书的签发及使用过程中知道服务端在申请CA证书时只上交了密钥对中的公钥,那么只有服务端知道的私钥有什么作用呢? SSL/TLS层的位置 SSL/TLS层在网络模型的位置,它属于 ...

SSL&TlS握手

SSL/TLS简介 •SSL:安全套接字层(secure socket layer) •TLS:传输层安全协议(transport layer security) SSL和TLS都是加密协议,旨在基于 ...

HTTP和HTTPS的区别,SSL的握手过程

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

随机推荐

Windows Server 2012 为什么没有“磁盘清理”选项了?

用习惯了客户端版的Windows,对于磁盘清理想必大家都不会陌生,他具有安全.快捷.准确.集中化的删除系统中的临时文件.管理系统还原卷影副本.添加删除程序的快捷入口等便捷功能,而在Server版的Wi ...

haproxy para config

.. from http://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html 常用配置选项: OPTION 选项: option http ...

一个统计报表sql问题

今天朋友问我了一个统计报表的sql问题.我弄了好久.终于算是写出来了.这里记录下. 问题:  id--------------name--------------addtime1            ...

Python创建list和按照索引访问list

Python创建list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.比如,列出班里所有同学的名字,就可以用一个list表示:>&gt ...

jquery ajax 使用

异步刷新实现方式有多种,也可以借助JS的多种框架,下面是使用JQuery框架实现的AJAX 验证用户名是否存在 jQuery.ajax概述 HTTP 请求加载远程数据. 通过jQuery 底层 AJA ...

IIS10安装IIS URL重写模块2伪静态组件提示需要IIS7.0以上版本。

解决方法: 打开注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp 双击右边MajorVersion,默认的数值是a,修改成9,然后再安装 ,安装完成后 ...

解决IPOD NANO7无法开机

确定是没电了,按着开关键都没反应,网上求了一招 按住没有反应的ipod nano [开关] + [home] 大概10s钟,开机,然后赶紧充电吧,这哥们进入了深度睡眠模式了!

Delphi RAD Berlin OutputDebugString 输出调试信息

Delphi RAD Berlin Event Log.OutputDebugString 输出调试信息,仅在win VCL下可以用.OutputDebugString(PChar('hellowor ...

Django signal 信号机制的使用

Django中提供了"信号调度",用于在框架执行操作时解耦,当某些动作发生的时候,系统会根据信号定义的函数执行相应的操作 一.Django中内置的 signal 类型主要包含以下几 ...

taglist-plus 安装使用

taglist 可以查看文件中的 类,函数,变量等信息. 在.vimrc中添加: Plugin 'taglist-plus' 然后打开vim编辑器 PluginInstall 使用: 打开taglis ...

c语言 tls单向认证 验证证书,使用wireshark观察SSL/TLS握手过程--双向认证/单向认证...相关推荐

  1. 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

    SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书. 2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客 ...

  2. SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808) SSL/TLS RC4 信息泄露漏洞(CVE-2013-2566)

    服务器被绿盟软件扫描出存在SSL/TLS漏洞, SSL/TLS协议是一个被广泛使用的加密协议,Bar Mitzvah攻击实际上是利用了"不变性漏洞",这是RC4算法中的一个缺陷,它 ...

  3. RFC8705-OAuth 2.0双向TLS客户端身份验证和证书绑定访问令牌

    RFC8705-OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens 目录 摘要 1. 简介(I ...

  4. 【ssl认证、证书】SSL 证书基本概念、证书格式、openssl和keytool的区别

    文章目录 1. keytool VS openssl 2. X.509 VS PKCS 2.1 PKCS 2.2 X.509 2.2.1 证书编码格式 2.2.1.1 DER 证书编码格式二进制 2. ...

  5. 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系

    文章目录 1. 前言 java中的ssl语法与keytool 工具的联系 2. SSLContext的体系 2.1 KeyStore 2.1.1 通过证书库文件创建: 2.1.2 随机生成自签名证书库 ...

  6. SSL/TLS 双向认证(一) -- SSL/TLS工作原理

    本文部分参考: https://www.wosign.com/faq/faq2016-0309-03.htm https://www.wosign.com/faq/faq2016-0309-04.ht ...

  7. SSL/TLS 双向认证(一) -- SSL/TLS 工作原理

    本文部分参考: https://www.wosign.com/faq/faq2016-0309-03.htm https://www.wosign.com/faq/faq2016-0309-04.ht ...

  8. SSL/TLS 双向认证

    其他参考链接 链接: https://blog.csdn.net/xxss120/article/details/78758832. 链接: https://blog.csdn.net/gx_1983 ...

  9. 【ssl认证、证书】SSL双向认证java实战、keytool创建证书

    文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...

  10. 【ssl认证、证书】openssl genrsa 命令详解

    文章目录 一.openssl genrsa 命令介绍 二.openssl genrsa 命令的语法及选项 三.实例 1.生成512位的 RSA 秘钥,输出到屏幕. 2.生成512位 RSA 私钥,输出 ...

最新文章

  1. 判断请求是否为Ajax请求的小妙招
  2. 编译出错libicui18n.so.58: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8‘
  3. 计数排序,基数排序,桶排序
  4. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18)
  5. 简谈造成循环引用的原因以及处理办法
  6. 迈克尔·乔丹,无可复制的篮球之神!
  7. jenkins pipeline php,Jenkins pipeline 系列二-为什么选择Pipeline
  8. 中国石化:五年要建充换电站5000座
  9. mysql全局变量的使用_mysql - 变量的使用
  10. 一种将排序值换算为得分值的方法
  11. BMP、GIF、TIFF、PNG、JPG和SVG格式图像的特点
  12. 三星升级助手无法连接服务器,三星S 换机助手不能连接手机怎么办?
  13. 全国哀悼日 一段css让全站变灰
  14. 【转载】一些常用的WebServices 天气,IP,邮编,Emai
  15. 新浪-InSAR博客网址Blog of Jerome Cheung
  16. 看好699指纹手机暴露任泉的商业野心
  17. (SELECT SUBSTRING(AreaCode FROM 0 FOR 5)FROM sysarea) = '810103'
  18. android小型app创意,创意无止境!17款让人脑洞大开的APP推荐
  19. 微信配置JS接口安全域名-Nginx配置 文件的配置
  20. 培训三天敏捷我懂了这些

热门文章

  1. POJ 3537.Crosses and Crosses(定义sg函数)
  2. 每一代内存的读写速度
  3. 保护水资源公益网站html,保护水资源公益广告词
  4. 刚刚,5000000 里程碑达成!
  5. 端到端和非端到端的Embedding,以及embedding质量评估
  6. php中eregi,php – 函数eregi()已弃用
  7. ddwrt open*** tun
  8. win7共享文件提示输入网络密码
  9. c226打印机驱动安装_打印机驱动安装失败怎么办 打印机驱动安装方法【步骤详解】...
  10. Mybatis插入大量数据效率对比:foreach插入、SqlSession批量插入、sql插入