SSL/TLS协议概览
SSL/TLS协议是什么
计算机网络的OSI
七层模型和TCP/IP
四层模型想必大家都知道。其中SSL/TLS
是一种介与于传输层(比如TCP/IP
)和应用层(比如HTTP
)的协议。它通过"握手协议(Handshake Protocol)
"和"传输协议(Record Protocol)
"来解决传输安全的问题。SSL/TLS
是一个可选层,没有它,使用HTTP
也可以通信,它存在的目的就是为了解决安全问题,这也就是HTTPS
相对于HTTP
的精髓所在.
SSL:(Secure Socket Layer,安全套接字层)
TLS:(Transport Layer Security,传输层安全协议)
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。
SSL/TLS协议发展历史
SSL/TLS
协议发展历史参看下表,更详细的发展历史参看维基百科的SSL/TLS协议发展历史。
目前,应用最广泛的是TLS 1.0
,接下来是SSL 3.0
。但是,主流浏览器都已经实现了TLS 1.2
的支持。值得一提的是iOS9
的App
,需将HTTP
连接升级到HTTPS
,并且TLS
版本不得低于1.2
(当然升级为HTTPS
并非必须的)。
SSL/TLS运行过程
SSL/TLS运行过程概述
上面提到SSL/TLS有两个阶段握手协议
和传输协议
,握手协议
就是建立起连接的过程,这个阶段采用非对称加密,这个过程完毕后会生成一个对话秘钥
,从而传输协议
过程,就是用这个对话秘钥
使用对称加密进行传输。之所以这样做,是因为,非对称加密是很耗性能的。而握手协议过程中,使用数字证书保证了公钥的安全性。当然这个过程既可以双向证书验证,也可以只验证服务端的证书单向证书验证。这也是前两节所作的铺垫,不至于这儿看的太迷糊。
SSL/TLS运行过程详解
客户端发出请求(Client Hello)
对应上图第一步,客户端发出请求,这一步客户端主要向服务端提供以下信息:
- 支持的
SSL/TLS
协议版本 - 支持的加密套件列表
(cipher suite)
- 支持的压缩算法列表
(compression methods)
,用于后续的压缩传输 - 产生的一个随机数
random_C(random number)
,客户端有存留,稍后用于生成"对话密钥(session key)"
服务端回应(Server Hello)
收到客服端的请求之后,服务端向客户端回应以下信息:
- 根据客户端支持的
SSL/TLS
协议版本,和自己的比较确定使用的SSL/TLS
协议版本,如果没有合适的,对话关闭 - 回应加密套件,压缩算法
- 产生的一个随机数
random_S(random number)
,服务端有存留,稍后用于生成"对话密钥(session key)"
- 服务端数字证书(证明自己的身份,传递公钥)
- 如果需要验证客户端,发出请求,要求客户端提供证书
客户端回应
客户端收到服务端的回应后,首先验证服务端的数字证书,如果证书没有问题继续下去,如果证书有问题,则会有相应提示,或者对话直接关闭。然后客户端在向服务端发送以下信息:
- 如果服务端有请求证书,发送自己的数字证书
- 在产生一个随机数
pre-master key(random number)
,并且用服务端数字证书中的公钥加密 - 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
服务端最后的回应
如果有客户端的证书,就先验证客户端的证书
- 使用自己的私钥,对随机数
pre-master key
解密,这时客户端和服务端各自有了三个随机数,然后用原来协商的加密方式生成本次通话使用的会话密钥(session key)
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
这时客户端和服务端都有了session key
,然后握手协议阶段就结束了。下面开始使用session key
对称加密数据,进行传输,就进入了下一个阶段,传输协议过程。
总结
这块的重点在与SSL/TSL
协议的握手协议过程。在第三步,客户端验证证书的时候,如果服务端的证书在系统默认信任证书列表中(系统会默认信任一些CA
认证中心的根证书)则会直接通过,如果没有在系统默认信任证书列表中,浏览器可能会弹窗让用户选择是否信任该证书,也有可能会直接关闭连接,提示用户,证书不可信。而在App
内,如果想要信任未在系统信任列表中的证书,则需要在App
内提前置入服务端证书,关于这一点有讲。而关于认证方式,大多数也都是采用的单向认证,也就是说仅仅认证服务端的证书,而像银行等机构则多使用双向认证的方式。
参考链接:http://www.jianshu.com/p/c93612b3abac
https://kb.cnblogs.com/page/197396/
SSL/TLS协议概览的更多相关文章
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- 聊聊HTTPS和SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- 浅谈HTTPS和SSL/TLS协议的背景和基础
相关背景知识要说清楚HTTPS协议的实现原理,至少要需要如下几个背景知识.大致了解几个基础术语(HTTPS.SSL.TLS)的含义大致了解HTTP和TCP的关系(尤其是"短连接"和 ...
- SSL/TLS协议运行机制的概述
互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...
- 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础
来自:编程随想 >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...
- SSL/TLS协议运行机制
转载自http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行 ...
- 【转】SSL/TLS协议运行机制的概述
互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...
- 好程序员带你了解一下HTTPS和SSL/TLS协议的背景与基础
>> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 TCP 的关系(尤其 ...
- SSL/TLS协议工作流程
我看了CloudFlare的说明(这里和这里),突然意识到这是绝好的例子,可以用来说明SSL/TLS协议的运行机制.它配有插图,很容易看懂. 下面,我就用这些图片作为例子,配合我半年前写的<SS ...
随机推荐
- CSS-自定义高度的元素背景图如何自适应以及after伪元素在ie下的处理
我都好久没更新了! 遇到一个效果,之前没有考虑清楚,设置了固定高度,到了后边,产品要加长,我就觉得设计得从新弄张长点的背景图!这不多余么? 其实分析原图还是可以再切分,再细化到不用改设计图,让我们前端 ...
- Android 测量调用方法耗时的方法
private long mDrawnRealTime; 起点:mDrawnRealTime = SystemClock.elapsedRealtime(); 终点: long delay = Sys ...
- js offset
1.offsetParent offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素. 如果 ...
- Android Activity 半透明效果(Translucent)
本文转自:http://norety.javaeye.com/blog/648725 今天试着做activity半透明的效果,做出来之后才发现想复杂了!很简单的几句就可以实现,不多说了,贴代码! 1. ...
- centos配置Tomcat以指定的身份(非root)运行
本文依赖的环境: 已安装并配置好jdk和tomcat环境 已安装并配置好gcc.make等编译工具 1.编译安装守护程序 cd /usr/local/tomcat7/bin/ tar vzxf c ...
- 单机器启动多个tomcat的配置修改
首先去apache下载一个tomcat,下载解压版的,比较方便 把这个tomcat(我下载的是tomcat7版本),解压两次,为了方便显示,我把解压出来的tomcat重命名成tomcat71和to ...
- hdu2196 Computer【树形DP】【换根法】
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Educational Codeforces Round 29
A. Quasi-palindrome 题目链接:http://codeforces.com/contest/863/problem/A 题目意思:问一个数可不可以在不上一些前缀0以后变成一个回文数. ...
- mybatis-spring-boot-autoconfigure
mybatis-spring-boot-autoconfigure – MyBatis Sring-BootStarter | Reference Documentation http://www.m ...
- 将expression转化为数据类型int时发生算术溢出错误
在SQL Server 中,某列的数据都在int范围之内,但是使用sum聚集函数求该列和的时候,出现“将expression转化为数据类型int时发生算术溢出错误”. 问题在于定义的数据类型: 首先, ...