背景:
https基于SSL,目的是保护http通信的过程,防止中间人篡改信息,或假冒服务端的问题。
 
要解决的问题:
1. 客户端如何证明是与正确的服务端进行通信
2. 客户端如何确认收到服务端的信息没有经中途某人篡改
3. 如何保证即使消息被中间人截获,也不能知道消息的内容
 
通信流程:
 
0. 在目前主流浏览器、Android、IOS手机中,会内置一些常用机构颁发的根证书(证书颁发机构的公钥);
0.1 某服务器要申请证书,必须先自行生成一对公私钥;
0.2 服务器将公钥交给第三方证书机构买证书;
0.3 证书机构用自己的私钥对服务端的公钥进行签名(即用证书机构的公钥+此签名, 可以校验服务端的公钥的正确性);
0.4 颁发证书,实际就是将服务器的公钥返回,并附加上机构用私钥做的签名;
0.5 服务器端部署此证书。
 
以上是为了https通信进行的准备工作。最主要的是客户端预置证书机构的根证书、服务器端生成证书。
 
通信过程中,流程如下:
 
1. 客户端请求ssl的服务端;
2. 服务端返回服务器证书,此为明文。明文的含义是,本证书被截获、篡改均可被客户端识别;
3. 客户端验证证书:
     按证书里颁布机构的信息,到本地取出对应机构的证书(机构公钥),对服务器的公钥签名验证。如签名验证正确,说明此服务器公钥是经此机构保证的。
     如果本地没有找到对应的机构证书、或签名认证不正确,则验证证书失败。
4. 经过上述步骤,服务器公钥已被证明可靠。使用服务器公钥加密一个随机串,发给服务端;
5. 发送至今所有包的校验串,密文
6. 服务端做同样的事,生成随机串和检验头
X. 至此,客户端和服务端在加密的情况下,交换了一个随机字符串。后续,使用此字符串对称加密所发送的所有消息,第三方则无法截获。
 
回到开始3个问题:
1. 客户端如何证明是与正确的服务端进行通信
通过本地预置的机构证书(对应机构的公钥)验证服务器发送过来的签名
2. 客户端如何确认收到服务端的信息没有经中途某人篡改
建立连接阶段,使用加密的校验头来校验已发出的所有信息;通信过程中,通过建立连接过程中交换的随机串加解密来确认
3. 如何保证即使消息被中间人截获,也不能知道消息的内容
中间人无法取到双方建立连接过程中交换的随机串
 
 
其他:
1. 一切都假定证书机构是值得信任的,但实际上证书机构可能被黑过;
2. 部分场景中,服务端也要确认客户端的身份,此时需要引入客户端证书;
 

https基础流程的更多相关文章

  1. [.net 面向对象编程基础] (7) 基础中的基础——流程控制语句

    [.net 面向对象编程基础] (7) 基础中的基础——流程控制语句 本来没有这一节的内容,后来考虑到既然是一个系列文章,那么就尽可能写的详细一些,本节参考了网上朋友所写的例子,为的是让更多小伙伴学习 ...

  2. [信息安全] 3.HTTPS工作流程

    [信息安全]系列博客:http://www.cnblogs.com/linianhui/category/985957.html 0. 简单回顾 在前面两篇博客中介绍了密码相关的一些基本工具,包括(对 ...

  3. HTTPS加密流程超详解(一)前期准备

    0.前言 前一阵子想写一个HTTPS的嗅探工具,之前只是大致了解SSL/TLS协议的加密流程,真正上起手来一步一步分析发现还是有点复杂的,于是我参考了wireshark的源码以及各种RFC,弄清楚了S ...

  4. HTTPS 通讯流程

    原文地址 https://blog.csdn.net/wangweilica6/article/details/50171457 一.简介 前一篇文章,我总结了下,如何部署https服务,开通ssl通 ...

  5. https 通信流程和Charles 抓包原理

    1. https 通信流程 ①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息.②服务器向客户端传送SSL 协议的版本 ...

  6. TCP连接、释放及HTTPS连接流程

    一.建立连接是三次握手 为什么三次握手?前两次握手为了确认服务端能正常收到客户端的请求并愿意应答,后两次握手是为了确认客户端能正常收到服务端的请求并愿意应答.三次握手可以避免意外建立错误连接而导致浪费 ...

  7. 小白学 Python(8):基础流程控制(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  8. HTTPS加密流程理解

    HTTPS加密流程 由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击 HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TC ...

  9. Java编程基础——流程控制

    Java编程基础——流程控制 摘要:本文主要介绍Java编程中的流程控制语句. 分类 流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下三种: 顺序结构:从上到下依次执行每条语句操作 ...

随机推荐

  1. macos开发pgsql数据库

    mac安装Postgresql作为数据库 最简单的方式是安装Postgres.App. 这个应用里自带了最新版本的PostgreSQL而且不需要学习数据库服务器启动和关闭的命令.程序安好后(别忘了拖拽 ...

  2. HDU1242 BFS+优先队列

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  3. 通过YUM库自动安装Mongodb

    1.1查看操作系统版本 1.2验证当前yum库是否包含mongodb 1.3配置包含mongodb的yum源 1.4再次验证YUM库中的mongodb 1.5 yum库安装mongodb 为方便观察, ...

  4. Java图片转换为base64格式

    /** * @Descriptionmap 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 * @author temdy * @Date 2015-01-26 * @param pa ...

  5. html和css的联系

    前几天学习了一点html,今天团队为做项目一起学习时,又了解到了新的东西———css,通过组内队员的指导和对一些网站(三翼)的分析,发现了html和css之间联系密切.根据从网上了解的资料,发现htm ...

  6. 前端开发与SEO

    前端开发中通过一些小习惯,可以有利于SEO,本着蚊子再小也是肉的原则,能抓住自然不能忽略. 1.控制首页链接数量,不能过多,也不要太少.更不要为了凑数而添加 2.扁平化层次,力争跳转三次可以到任何页面 ...

  7. HDU 3966 & POJ 3237 & HYSBZ 2243 树链剖分

    树链剖分是一个很固定的套路 一般用来解决树上两点之间的路径更改与查询 思想是将一棵树分成不想交的几条链 并且由于dfs的顺序性 给每条链上的点或边标的号必定是连着的 那么每两个点之间的路径都可以拆成几 ...

  8. Codeforces554 C Kyoya and Colored Balls

    C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...

  9. 【java基础学习】反射

    1. 什么是反射 Class.Method.Field.Constructor,它们是反射对象.它们是类.方法.成员变量.构造器,在内存中的形式. 也就是万物皆对象!类是类型.方法是类型.成员变量是类 ...

  10. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...