使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
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 |
|
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_done
server 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。
使用wireshark观察SSL/TLS握手过程--双向认证/单向认证相关推荐
- SSL/TLS握手过程
1.握手与密钥协商过程 基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程 再看一张手绘时序图 (1).client_hello 客户端发起请求,以明文传输请求信息,包 ...
- 如何解决SSL/TLS握手过程中失败的错误?
Fixes for the SSL/TLS Handshake Failed error for both internet users and site owners It's time for a ...
- 例说图解TCP/IP协议族--TLS篇(1)抓包分析SSL/TLS握手
SSL是Secure Sockets Layer (安全套接层)的简写,SSL协议是为网络通信提供安全的一种安全协议,继任者为TLS,即 Transport Layer Security传输层安全. ...
- 深入解析:如何修复SSL / TLS握手失败错误(上)
接下来的三篇内容我们来讨论SSL / TLS握手失败错误及其修复方法. 针对互联网用户和网站所有者的SSL / TLS握手失败错误修复程序 像许多SSL错误消息一样,SSL握手错误可以从客户端和服务器 ...
- 用Wireshark看见TLS握手过程
文章目录 摘要 TLS握手协议介绍 准备工作 安装wireshark wireshark的使用 看见TLS握手过程 TLS安全连接的客户端程序 -- 非完整代码 客户端类 -- 代码示例 客户端类 - ...
- linux服务器抓包分析,抓包分析SSL/TLS连接建立过程总结
1.前言 最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下.开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来 ...
- 抓包分析SSL/TLS连接建立过程
点击上方蓝字,关注我们 1.前言 如今全站https的趋势越来越强烈,互联网对安全的认识越来越深入.本文根据自己的实际情况,对SSL链接建立做个总结.SSL相关的非对称加密和加密,涉及到公钥.私钥.证 ...
- 抓包分析SSL/TLS连接建立过程【总结】
1.前言 最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下.开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来 ...
- SSL/TLS连接建立过程
分析SSL/TLS连接建立过程 1.基本概念 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字 ...
最新文章
- Kafka系列一之架构介绍和安装
- django-admin.py 不是内部或外部命令
- LiveRTMP 之RTMP直播高效推送缓冲区
- AI安检:北航提出安检场景下的危险品检测基准和去遮挡注意力模块
- 【翻译】.NET Core3.1发布
- 架构大型企业Java项目–我的虚拟JUG会话
- linux代理破盾cc,Linux使用CCKiller防御少量IP高并发CC攻击(防刷站) - Late Winter
- AttributeError: ‘str‘ object has no attribute ‘decode‘ model = keras.models.load_model
- 电源大师课笔记 2.1
- 本科毕业论文论文框架,可参考
- 周鸿祎的“花房上市”执念
- ss3ex集成Beet记录日志
- 影响100年的营销启示 24个故事
- python sort 多级排序_python sort、sorted高级排序技巧
- DHTML乌托邦:使用JavaScript和DOM的现代Web设计
- numpy基础篇-简单入门教程4
- DBSCAN: 基于密度对空间含噪声数据中不规则形状进行聚类
- 使用vxe-table 制作编辑表格
- chrome浏览器配置,地理位置模拟
- 制粒机环模及压辊维修与保养手册