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 ...
随机推荐
- 服务器报错 500,请确保 ASP.NET State Service(ASP.NET 状态服务)已启动
报错信息: 解决方案: 开启此服务
- android 仿微信聊天界面,以及语音录制功能
extends:http://104zz.iteye.com/blog/1709840 本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图: 第一:chat.xml设计 ...
- 编程中,static的用法详解
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用.一.面向过程设计中的sta ...
- 用 Fiddler查看 Android 网络请求
1. 下载安装 fiddler,尽量到官方网站找最新的版本 备注:安装后,打开的时候如果报错: Machine-wide Progress Telerik Fiddler installation h ...
- shell 文件备份脚本
#!/bin/bash #输入参数:文件名 filename=$ #源文件目录 directory=/opt/docker/cloud-driver-training/apps #备份文件目录 bac ...
- Linux创建Python虚拟环境
Linux创建Python虚拟环境 安装 pip install virtualenv 基本使用 为一个工程创建一个虚拟环境: $ cd my_project $ virtualenv venv #v ...
- 自定义一个ListView实现聊天界面
摘要 ListView可以称得上Android中最常用也最难用的控件了,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示 ...
- Java 算法-快速幂
1 什么是快速幂? 快速幂,顾名思义就是快速的求次幂,例如:a^b,普通的算法就是累乘,这样的计算方法的时间复杂度就是O(n),而快速幂的方法使得次幂的计算方法的时间复杂度降低到O(logn). 假 ...
- 转!idea启动后发现tomcat前面出现红色或是灰色的问号
原博文地址:https://blog.csdn.net/z_zhy/article/details/83068168 直接在idea里 点击File------settings,在搜索框直接搜tomc ...
- CentOS 6.4下Squid代理服务器的安装与配置(转)
add by zhj: 其实我们主要还是关注它在服务器端使用时,充当反向代理和静态数据缓存.至于普通代理和透明代理,其实相当于客户端做的事,和服务端没有什么关系.另外,Squid的缓存主要是缓存在硬盘 ...