TLS协议扫盲(握手,非对称加密,证书,电子签名等)
想学习TLS协议最好的方法应该是去看RFC,但如果对安全传输协议没有一些基本认识的人很难一上来就读懂RFC里面的种种细节和设计原则,所以这里为了能够进一步去弄懂TLS协议,把一些基本的知识放在这里,算是扫下盲。
1. TLS与SSL的区别:SSL是TLS的前身,TLS做出了一些使其更安全的改进。事实上,在客户端向服务器发起连接请求时,会附上的所支持的协议版本;这里的协议版本标识了是SSL或TLS(3.1为TLS)
2. TLS在真正传输过程中使用对称加密,因为对称加密效率更高。而对称加密所使用的key是在握手过程中使用特定的算法协商出来的。老版本的SSL使用RSA协商算法,需要使用服务器的公钥来加密传输客户端随机生成的对称key。这种方法有一些安全隐患(一个隐患就是攻击者可以先存储下来双方的加密包。如果攻击者后来获取了服务器的私钥,进而就能获取对称key,从而破解密文)。最新的Diffie-Hellman算法可以在协商过程中不传递任何关于对称key的信息,因而更加安全。
3. 客户端使用证书对服务器进行身份验证。证书一般由其他机构发放,证书会包含证书的公钥,并会在结尾处对证书内容做哈希并用发放机构自己的私钥对哈希值做加密(电子签名)。客户端可以用证书中发放机构的公钥对证书结尾的电子签名做解密,并验证解密出的哈希值与证书正文的哈希值是否一致,以验证证书是否确实为所宣称的发放机构发放。这个验证发放者的过程可以不断递归直到验证到的一个可信的发放者,或者电子签名验证失败。现在一般证书的格式都采用X509这个标准。
上面所述的过程只能验证证书本身的可信性,而不能验证提供这个证书的服务器实际上持有相关证书。关于如何验证服务器确实是证书的持有者,可能有两种方法:
1). 让服务器用证书中公钥对应的私钥加密一段文字,客户端用证书的公钥解密这段密文并验证服务器的私钥是否对应证书的公钥(如何防范人在回路?)
2). 验证证书中的CN与服务器的CN(基本上可以理解为域名)。因为客户端在发起向的某个服务器的连接过程中,客户端是知道自己想要连接到的服务器的域名的。而服务器传回的证书中包含证书被颁发者的信息,这里面就包含了被颁发者的域名。由于证书是由颁发者的私钥进行签名加密的,证书的内容被颁发者无法随意篡改,所以可以通过比对证书中的域名信息来验证对方是否是某个域名的服务器。
大体就是这几个关键点,以后有时间再补充细节。
参考资料:
https://developer.mozilla.org/en-US/docs/Archive/Security/Introduction_to_SSL
http://chimera.labs.oreilly.com/books/1230000000545/ch04.html#TLS_FORWARD_SECRECY
http://blog.fourthbit.com/2014/12/23/traffic-analysis-of-an-ssl-slash-tls-session (非常详细解析协议每种message的格式,重点推荐!!)
关于openssl编程:
http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04s03.html
http://www.linuxjournal.com/node/5487/print
http://www.ibm.com/developerworks/library/l-openssl/
https://www.cs.utah.edu/~swalton/Documents/Articles/Programming-OpenSSL.pdf
关于session resumption:
http://vincent.bernat.im/en/blog/2011-ssl-session-reuse-rfc5077.html
TLS协议扫盲(握手,非对称加密,证书,电子签名等)的更多相关文章
- [转载] TLS协议分析 与 现代加密通信协议设计
https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...
- HTTPS协议、TLS协议、证书认证过程解析
一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (S ...
- 探究公钥、私钥、对称加密、非对称加密、hash加密、数字签名、数字证书、CA认证、https它们究竟是什么,它们分别解决了通信过程的哪些问题。
一.准备 1. 角色:小白.美美.小黑. 2. 剧情:小白和美美在谈恋爱:小黑对美美求而不得.心生怨念,所以从中作梗. 3. 需求:小白要与美美需通过网络进行通信,联络感情,所以必须保证通信的安全性. ...
- HTTPS协议,TLS协议
一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (S ...
- SSL/TLS协议概览
SSL/TLS协议是什么 计算机网络的OSI七层模型和TCP/IP四层模型想必大家都知道.其中SSL/TLS是一种介与于传输层(比如TCP/IP)和应用层(比如HTTP)的协议.它通过"握手 ...
- TLS协议分析
TLS协议分析 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解 ...
- 假如让你来设计SSL/TLS协议,你要怎么设计呢?
摘要:本文将从设计者的视角介绍如何一步步设计出一个简易版的 SSL/TLS 的过程,在文章的最后,再简单介绍 TLS 1.2 版本的工作机制,以此帮助大家对 SSL/TLS 协议的基本原理有一个更深入 ...
- 【转】Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)
本文转自:http://www.wjdiankong.cn/wireshark%E5%92%8Cfiddler%E5%88%86%E6%9E%90android%E4%B8%AD%E7%9A%84tl ...
- android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)
一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...
随机推荐
- js比较时间大小(时间为以-分割的字符串时)
function dateCompare(startdate, enddate) { var arr = startdate.split("-"); var start ...
- UVA-1612 Guess (贪心)
题目大意:考试共有三道题,n个人,每个人对每道题的可能得分已知,现在已知考后排名情况,问排名合不合理. 题目分析:贪心.贪心策略:每处理一个排名,都让他的得分尽量高. # include<ios ...
- CF 272E Dima and Horses 染色,dfs 难度:2
http://codeforces.com/problemset/problem/272/E 把仇恨关系想象为边, 因为度只能为0,1,2,3,所以有以下几种 0,1 直接放即可 2: 有(1,1), ...
- 基于Open XML 导出数据到Excel
数据导出的结果: 步骤1.新建一个Excel 文档,模板根据自己需要设置 步骤2.使用OpenXml 打开Excel 文件 步骤3.点击ReflectCode 功能,生成相应的代码文档 using ...
- vc14(vs2015) 编译php7 记录
windows 编译php 官方教程 https://wiki.php.net/internals/windows/stepbystepbuild 参考 http://blog.csdn.net/ ...
- 本地代码同步到github
1 设置 ssh 公钥信息 首先你要确保 github 账号设置了ssh 公钥信息.如果没有的话可以按照下面的方式设置: 前往 github 网站的 account settings, 依次点击 Se ...
- tensorflow中tensor的静态维度和动态维度
tf中使用张量(tensor)这种数据结构来表示所有的数据,可以把张量看成是一个具有n个维度的数组或列表,张量会在各个节点之间流动,参与计算. 张量具有静态维度和动态维度. 在图构建过程中定义的张量拥 ...
- windows10企业版2016长期服务版激活 -------转
原地址: https://blog.csdn.net/chaoyu168/article/details/79241506 win10 2016 长期服务版的ISO文件中本身就带有KMS激活KEY,不 ...
- UVA11019 Matrix Matcher【hash傻逼题】【AC自动机好题】
LINK1 LINK2 题目大意 让你在一个大小为\(n*m\)的矩阵中找大小是\(x*y\)的矩阵的出现次数 思路1:Hash hash思路及其傻逼 你把一维情况扩展一下 一维是一个bas,那你二维 ...
- .NET/C# 使用反射调用含 ref 或 out 参数的方法
使用反射,我们可以很容易地在运行时调用一些编译时无法确定的属性.方法等.然而,如果方法的参数中包含 ref 或 out 关键字的时候,又该怎么调用呢? 本文将介绍如何反射调用含 ref 或 out 关 ...