想学习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_Public-Key_Cryptography#How_CA_Certificates_Are_Used_to_Establish_Trust

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协议扫盲(握手,非对称加密,证书,电子签名等)的更多相关文章

  1. [转载] TLS协议分析 与 现代加密通信协议设计

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...

  2. HTTPS协议、TLS协议、证书认证过程解析

    一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (S ...

  3. 探究公钥、私钥、对称加密、非对称加密、hash加密、数字签名、数字证书、CA认证、https它们究竟是什么,它们分别解决了通信过程的哪些问题。

    一.准备 1. 角色:小白.美美.小黑. 2. 剧情:小白和美美在谈恋爱:小黑对美美求而不得.心生怨念,所以从中作梗. 3. 需求:小白要与美美需通过网络进行通信,联络感情,所以必须保证通信的安全性. ...

  4. HTTPS协议,TLS协议

    一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (S ...

  5. SSL/TLS协议概览

    SSL/TLS协议是什么 计算机网络的OSI七层模型和TCP/IP四层模型想必大家都知道.其中SSL/TLS是一种介与于传输层(比如TCP/IP)和应用层(比如HTTP)的协议.它通过"握手 ...

  6. TLS协议分析

    TLS协议分析 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解 ...

  7. 假如让你来设计SSL/TLS协议,你要怎么设计呢?

    摘要:本文将从设计者的视角介绍如何一步步设计出一个简易版的 SSL/TLS 的过程,在文章的最后,再简单介绍 TLS 1.2 版本的工作机制,以此帮助大家对 SSL/TLS 协议的基本原理有一个更深入 ...

  8. 【转】Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    本文转自:http://www.wjdiankong.cn/wireshark%E5%92%8Cfiddler%E5%88%86%E6%9E%90android%E4%B8%AD%E7%9A%84tl ...

  9. android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20165332 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165332 Exp3 免杀原理与实践 实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用 ...

  2. 不管服不服 Windows仍是全球第一大桌面系统

    不管服不服 Windows仍是全球第一大桌面系统 近日,根据来自市场调研机构 Net Applications 公布的统计数据显示,Windows 依然是世界上排名第一的操作系统,而且未来将很难被打破 ...

  3. hdu1517找规律

    挺像巴什博弈的,直接递推就能找到规律了,从2开始到9,s win,10到18,o win,18到162,s win,一直向下推进 #include<map> #include<set ...

  4. elasticsearch 自定义similarity 插件开发

    转自:http://www.chepoo.com/elasticsearch-similarity-custom-plug-in-development.html 在搜索开发中,我们要修改打分机制,就 ...

  5. linux centos 虚拟机新安装后没有网络

    ping的时候出现 name or service not known的时候 可以 修改/etc/sysconfig/network-scripts/ifcfg-ens33 文件 vi ifcfg-e ...

  6. CS231n课程笔记翻译6:神经网络笔记 part1

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Neural Nets notes 1,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,巩子嘉和堃堃进行校对修改.译文含 ...

  7. c#TextBox输入框自动提示、自动完成、自动补全功能

    功能概览 相关属性 TextBox.AutoCompleteCustomSource 属性 获取或设置当 TextBox.AutoCompleteSource 属性设置为 [CustomSource] ...

  8. Linux运维学习笔记-角色知识总结

    角色通过UID和GID区分 root:超级管理员,拥有所有权限,UID(0). 普通用户:拥有操作自己家目录下的所有权限,其他文件及目录(/etc./var)只有读的权限,UID(500-65535) ...

  9. Multiple Object Tracking using K-Shortest Paths Optimization简要

    参考文献:Multiple Object Tracking using K-Shortest Paths Optimization 核心步骤: 两步:一.detection 二.link detect ...

  10. Linux下软件安装方法

    1.交叉编译: ./configure --prefix=/usr/local/XXX ...... --host=armeg:./configure --prefix=/media/ubuntu/w ...