https基础流程

背景:

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. 部分场景中,服务端也要确认客户端的身份,此时需要引入客户端证书;

时间: 2024-10-18 13:00:27

https基础流程的相关文章

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

人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变量基础操作 小白学 Python(5):基础运算符(上) 小白学 Python(6):基础运算符(下) 小白学 Python(7):基础流程控制(上) 循环结构 循环结构一般而言,就是一直做某件事情,直到满足某种条件. 正常的 while 循环 比如:学习使我快乐,一直学习一直快乐. 这好像和我上面

http认证原理和https工作流程

一.http认证原理 http定义了两个官方认证:基本认证和摘要认证,两者遵循相同的流程: 1 客户端发起GET请求 2 服务器响应401 Unauthorized,WWW-Authenticate指定认证算法,realm指定安全域 3 客户端重新发起请求,Authorization指定用户名和密码信息 4 服务器认证成功,响应200,可选Authentication-Info [基本认证] 将"用户名:密码"打包并采用Base-64编码 缺点:密码很容易被窥探,可以挟持编码后的用户名

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

[.net 面向对象编程基础] (7) 基础中的基础——流程控制语句 本来没有这一节的内容,后来考虑到既然是一个系列文章,那么就尽可能写的详细一些,本节参考了网上朋友所写的例子,为的是让更多小伙伴学习,提高,加薪,如有版权问题,请邮件我,我第一时间处理. 语句:是程序中的小指令,本节主要以流程控制语句为主要内容. 流程控制语句中最常用的三个是 选择语句(即条件语句).循环语句和异常处理语句 流程控制语句分类: 类别    关键字 选择语句  if.else.switch.case 循环语句  d

Jmeter_接口自动化基础流程概述

1:创建一个线程组 2:添加一个cookie管理器   测试开发交流群 317765580 3:设置你的信息头管理器:application/json;text/plain;charset=UTF-8  测试开发交流群 317765580 44 4:添加一个用户参数,做全局变量使用.此处将url写成全局变量,后期只需要在此处修改url,而不需要去每一个接口中单独调整  测试开发交流群 317765580 5:添加一个默认请求值,这里的参数设置之后可以作为后期所有接口脚本模板,不需要重复填写 6:

HTTPS加密协议详解(一):HTTPS基础知识

转自:https://blog.csdn.net/hherima/article/details/52469267------------------------------专栏导航:------------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议详解(三):PKI 体系HTTPS协议详解(四):TLS/SSL握手过程HTTPS协议详解(五):HTTPS性能与优化---------

HTTPS 通讯流程

原文地址 https://blog.csdn.net/wangweilica6/article/details/50171457 一.简介 前一篇文章,我总结了下,如何部署https服务,开通ssl通道.但是对于https整个通信流程还有许多疑惑的地方,所以花了好几天看了各种资料,其中有的资料也误导了我,导致我走了些弯路.接下来我就来总结一下,帮助初学者理清https通信流程. 二.名词解释 1.签名 签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是

https加密流程和原理

其实,我对https以前只有一个大概的了解,最近工作中遇到一个问题从而将https协议做了一个彻底的学习和认知,下边介绍一下我的个人认识,我不一定按照很官方的语句去表达,本人喜欢用通俗易懂的语言描述问题,目的是让人理解 那么,首先,https协议是什么,一句话,https=http+ssl安全传输协议+ca身份认证:https是http的安全版,它不仅涵盖http协议,而且加入了ssl安全加密传输协议保证数据传输的安全性,ca身份认证则验证服务器域名是否是真实可靠的 1,下面,用一幅图展示一下h

JAVA基础-流程控制语句注意事项

1:switch语句(掌握) (1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n+1; break; } 格式解释说明: switch:说明这是switch语句. 表达式:可以是byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是字符串 case:后面的值就是要和表达式进行比较的值 break:表示程序到这里中断,跳出switch语句 default:如

个人理解的 Https 通信流程

https 简单理解是 http + ssl 安全协议. http 协议的问题是,数据在传递的过程中,会经过很多路由,网关等,可能会被恶意的路由器进行数据拦截,篡改等. https 的通信流程:1.首先确定服务器是经过安全机构认证的,是可信任的.2.通信过程是经过加密的. 1.a. 首先公司向认证机构,申请证书,认证机构根据公司的信息等,生成 子证书,然后把 (子证书, (子证书通过HASH算法,进行安全哈希,生成消息摘要,用私钥加密生成的)数字签名, 公钥,私钥)给公司. 1.b. 客户端向服