目录

前言

SSL/TSL协议基本过程

SSL/TSL四次握手

SSL/TSL详细过程


前言

HTTPS是基于SSL安全连接的HTTP协议。HTTPS通过SSL提供的数据加密、身份验证bai和消息完整性验证等安全机制,为Web访问提供了安全性保证,广泛应用于网上银行、电子商务等领域。

此图为HTTPS在网上银行中的应用。某银行为了方便客户,提供了网上银行业务,客户可以通过访问银行的Web服务器进行帐户查询、转帐等。通过在客户和银行的Web服务器之间建立SSL连接,可以保证客户的信息不被非法窃取。

SSL/TSL协议基本过程

(1) 客户端向服务器端索要并验证公钥。

(2) 双方协商生成"对话密钥"。

(3) 双方采用"对话密钥"进行加密通信。

简单的来说,SSL/TSL通过四次握手,主要交换三个信息:

1 数字证书:该证书包含了公钥等信息,一般是由服务器发给客户端,接收方通过验证这个证书是不是由信赖的CA签发,或者与本地的证书相对比,来判断证书是否可信;假如需要双向验证,则服务器和客户端都需要发送数字证书给对方验证;2 三个随机数:这三个随机数构成了后续通信过程中用来对数据进行对称加密解密的“对话密钥”。
首先客户端先发第一个随机数N1,然后服务器回了第二个随机数N2(这个过程同时把之前提到的证书发给客户端),这两个随机数都是明文的;而第三个随机数N3(这个随机数被称为Premaster secret),客户端用数字证书的公钥进行非对称加密,发给服务器;而服务器用只有自己知道的私钥来解密,获取第三个随机数。这样,服务端和客户端都有了三个随机数N1+N2+N3,然后两端就使用这三个随机数来生成“对话密钥”,在此之后的通信都是使用这个“对话密钥”来进行对称加密解密。因为这个过程中,服务端的私钥只用来解密第三个随机数,从来没有在网络中传输过,这样的话,只要私钥没有被泄露,那么数据就是安全的。3 加密通信协议:就是双方商量使用哪一种加密方式,假如两者支持的加密方式不匹配,则无法进行通信;

SSL/TSL四次握手

1 客户端发出请求(ClientHello)

首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。

在这一步,客户端主要向服务器提供以下信息。(1) 支持的协议版本,比如TLS 1.0版。

(2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。
(3) 支持的加密方法,比如RSA公钥加密。
(4) 支持的压缩方法。

2 服务器回应(SeverHello)

(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 确认使用的加密方法,比如RSA公钥加密,返回加密公钥
(3) 服务器证书

3 客户端回应

a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

4 服务器

a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。

SSL/TSL详细过程

只需要验证SSL服务器身份,不需要验证SSL客户端身份时,SSL的握手过程为:

(1) SSL客户端通过Client Hello消息将它支持的SSL版本、加密算法、密钥交换算法、MAC算法等信息发送给SSL服务器。

(2) SSL服务器确定本次通信采用的SSL版本和加密套件,并通过Server Hello消息通知给SSL客户端。如果SSL服务器允许SSL客户端在以后的通信中重用本次会话,则SSL服务器会为本次会话分配会话ID,并通过Server Hello消息发送给SSL客户端。

(3) SSL服务器将携带自己公钥信息的数字证书通过Certificate消息发送给SSL客户端。

(4) SSL服务器发送Server Hello Done消息,通知SSL客户端版本和加密套件协商结束,开始进行密钥交换。

(5) SSL客户端验证SSL服务器的证书合法后,利用证书中的公钥加密SSL客户端随机生成的premaster secret,并通过Client Key Exchange消息发送给SSL服务器。
(6) SSL客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。

(7) SSL客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

(8) 同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。

(9) SSL服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL客户端。SSL客户端利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

SSL客户端接收到SSL服务器发送的Finished消息后,如果解密成功,则可以判断SSL服务器是数字证书的拥有者,即SSL服务器身份验证成功,因为只有拥有私钥的SSL服务器才能从Client Key Exchange消息中解密得到premaster secret,从而间接地实现了SSL客户端对SSL服务器的身份验证。

&  说明:

l      Change Cipher Spec消息属于SSL密码变化协议,其他握手过程交互的消息均属于SSL握手协议,统称为SSL握手消息。

l      计算Hash值,指的是利用Hash算法(MD5或SHA)将任意长度的数据转换为固定长度的数据。

HTTPS协议之SSL/TLS协议四次握手相关推荐

  1. HTTP协议,HTTPS协议,SSL/TLS协议概述

    HTTP协议,HTTPS协议,SSL/TLS协议概述 1. 什么是HTTP协议   HTTP(Hyper Text Transfer Protocol,HTTP)协议超文本传输协议,是一个基于请求与响 ...

  2. 详谈HTTPS SSL/TLS协议原理

    作者 | 朱小厮的博客 来源 | https://mp.weixin.qq.com/s/EVUsX57WOuFgzY748BvwuA 协议安全和加密越来越引起人们的重视和关注,今天就跟大家分享一点协议 ...

  3. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  4. 聊聊 HTTPS 和 SSL/TLS 协议

    原文:http://www.techug.com/post/https-ssl-tls.html 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.S ...

  5. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

  6. 【转】聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  7. HTTPS SSL/TLS协议原理

    HTTPS 协议的实现原理 1.大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2.大致了解 HTTP 和 TCP 的关系(尤其是 "短连接"VS"长连接&qu ...

  8. 【拜读】HTTPS和SSL/TLS 协议

    声明:原文实在写得太棒了,本人情不自禁对其转载并作了相应整理,原文链接见文末. HTTPS.SSL.TLS术语: HTTP的用途: 首先,HTTP 是一个网络协议,是专门用来帮你传输 Web 内容滴. ...

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

    本文分享自华为云社区<假如让你来设计SSLTLS协议>,作者:元闰子. 前言 说起网络通信协议,相信大家对 TCP 和 HTTP 都很熟悉,它们可以说是当今互联网通信的基石.但是,在网络安 ...

最新文章

  1. 一致性哈希算法以及其PHP实现
  2. ideal中如何添加几个不同的项目在同一个idea页面显示(同一个窗口显示多个工程)...
  3. 恢复WORD2010的默认模板2011-05-03
  4. async function_Electron IPC 通信如何使用 async/await 调用?
  5. 请谈一下,你知道的http请求,并说明应答码502和504的区别
  6. 不要在viewWillDisappear:方法中移除通知
  7. java核心知识点学习----多线程间的数据共享的几种实现方式比较
  8. 实战自制Linux操作系统
  9. jsp mysql连接池 回收_mysql连接池连接JSP
  10. 超好用的两行java代码能获取几乎所有文件的contentType,返回前端能在浏览器上直接打开
  11. JS学习——表单验证
  12. Android控件 TabHost,Android控件之TabHost用法实例分析
  13. HikariCP对各Java版本的支持
  14. 判断质数的所有方法详解(C语言)
  15. HTML 网页自动刷新
  16. springBoot搭配java小爬虫 获取百词斩单词释义
  17. 什么是验收测试?一份详细向导
  18. 【ArcGIS】道路中心线提取、河道中心线的提取
  19. 百度AI平台申请使用流程
  20. 谢烟客---------Linux之CentOS 7 systemd

热门文章

  1. 既然都说外企香,给你准备一波外企面经!
  2. 皮一皮:现在知道公司老说信息完整的重要性...
  3. 费解!为什么那么多人用“ji32k7au4a83”作密码?
  4. Git 自救指南:这些坑你都跳得出吗?
  5. 程序员如何解决工作中的技术问题?
  6. 【福利】赠书:Spring Cloud与Docker微服务架构实战(第2版)
  7. dlp防泄密系统卸载_浙江好用的企业图纸防泄密软件推荐,局域网内部图纸透明加密方案...
  8. http请求的3位返回码简单解释
  9. cuda 历史版本下载
  10. Windows下Go语言的安装和运行