zoukankan      html  css  js  c++  java
  • 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的支持。值得一提的是iOS9App,需将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/
    
    
  • 相关阅读:
    Mybatis 原始dao CRUD方法
    JQuery的焦点事件focus() 与按键事件keydown() 及js判断当前页面是否为顶级页面 子页面刷新将顶级页面刷新 window.top.location
    使用actionerror做失败登录验证
    Java项目中的下载 与 上传
    shiro框架 4种授权方式 说明
    javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式
    序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询
    Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 三种处理方法
    orcal 数据库 maven架构 ssh框架 的全注解环境模版 maven中央仓库批量删除lastupdated文件后依然是lastupdated解决方法 mirror aliyun中央仓库
    EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法
  • 原文地址:https://www.cnblogs.com/xiewenming/p/8036643.html
Copyright © 2011-2022 走看看