Https 原理与工作流程及证书链校验
本文为博主原创,未经允许不得转载:
http传输三大风险

安全通信原则
https就是为了解析http上面的三个风险诞生的, 一般我们认为安全的通信需要包括以下四个原则: 机密性、完整性,身份认证和不可否认 。

HTTPS定义
HTTPS 是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。这个系统提供了身份验证与加密通讯方法。

TLS/SSL 协议及加密算法
HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,SSL 全称为安全套接层(Secure Sockets Layer),
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,
其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
使用对称密钥的好处是解密的效率比较快,使用非对称密钥的好处是可以使得传输的内容不能被破解,因为就算你拦截到了数据,
但是没有对应的私钥,也是不能破解内容的。就比如说你抢到了一个保险柜,但是没有保险柜的钥匙也不能打开保险柜。
那我们就将对称加密与非对称加密结合起来,充分利用两者各自的优势,在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。
具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,
这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。
常用算法
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
https 工作流程
https流程图如下:
client向server发送请求https://baidu.com,然后连接到server的443端口。
服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。
传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
客户端解析证书 这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(密钥)。然后用证书对该随机值进行加密。
传送加密信息 这部分传送的是用证书加密后的密钥(随机值),目的就是让服务端得到这个密钥(随机值),以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
服务端加密信息 服务端用私钥解密,得到了客户端传过来的密钥(随机值),然后把内容通过该值进行对称加密。
传输加密后的信息 这部分信息是服务端用密钥(随机值)对称加密后的信息,可以在客户端被还原。
客户端解密信息 客户端用之前生成的密钥(随机值)解密服务端传过来的信息,于是获取了解密后的内容。
上述流程中的3,4,5即为 密钥协商交换算法 的过程。密钥交换协商机制是在身份认证的前提下,规避偷窥的风险。通俗的说,即使有攻击这在偷窥客户端与服务器的网络传输,
客户端依然可以利用密钥协商机制与服务器端协商出一个只有二者可知的用来对于应用层数据进行加密的密钥(也称“会话密钥”)。密钥协商交换算法具体可看这篇文章:
https://blog.csdn.net/CHYabc123456hh/article/details/108788580
https 请求的过程中,还可以使用hash算法或签名算法,校验请求或响应的参数是否被篡改。client 端和server约定好的hash算法,对请求体或响应体进行摘要计算,
在收到请求时,通过以上流程解密得到请求体,再使用hash算法对请求体进行hash计算,如果计算的值与另一端传过来的值相同时,则证明请求体没有被篡改。反之,请求被篡改。
HTTPS协议和HTTP协议的区别
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的 。
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议, 要比http协议安全。
CA机构
CA(Certificate Authority)机构 为证书颁发机构,其颁布的均为首认证可信的证书,在使用过程中浏览器不会弹出不可信错误。
SSL证书可以向CA机构通过付费的方式申请,也可以自己制作。 CA机构颁发的证书价格非常昂贵,而且有效期一般只有一年到三年不等(年数不同,价格也不同),
过期之后还要再次交钱申请,因此一般只有企业才会申请证书。
证书中主要包含:
证书颁发机构:用于寻找链中的下一个验证节点
证书的有效期:比如浏览器要根据这个值来判断证书是否已过期
证书申请信息:比如浏览器要判断改证书是否可用于当前访问的域名
公钥:用于后续和服务端通信的秘钥,这个公钥和当初生成 CSR 时的公钥是一个东西,因为只有它是和服务器的私钥是一对的
签名:用于验证证书内容没有被篡改
在浏览器查看 www.baidu.com 域名的 证书:

通过这种方式可以查看域名对应的证书的版本,签名算法,有效期,颁发者,使用者等等。
证书链
我们使用的证书都是由专门的CA机构颁发,根证书有统一的CA机构颁发,在根证书基础上颁发二级或三级证书具有CA的二级机构进行签发。

csdn 博客用的证书如上,其中DigiCert为顶端根证书,GeoTrust CN RSA CA G1为中间证书, *.csdn.net 为服务器证书,
当你点击对应的证书,会显示颁发者之间的关系,这种关系便形成证书链。如下图所示:

在证书链中,通常分三级结构,根证书,中间证书和服务器实体证书,正确的证书链顺序中服务器实体证书处在最底端,里面包含了些服务器域名,
服务器公钥和签名值等。服务器证书上一级是中间证书,中间证书就是上面提到的由权威CA机构授权的二级机构,可以由它来签发服务器证书。
中间证书可以是由多张证书组合在一起,最上级的是根证书,也就是CA机构,对服务器身份进行校验时,需要验证一整个证书链,
由于浏览器中集成了权威CA机构的根证书,因此主要是校验中间证书和服务器实体证书的签名值是否正确。
校验服务器身份需要验证整个证书链,从服务器实体证书开始,服务器实体证书的签发者是上一级中间证书的使用者,中间证书的签发者是上一级根证书的使用者。
每一级证书都有签名值,根证书使用自己的根CA公钥验证自己的签名,也用来验证中间证书的签名值,中间证书的公钥用来验证下一级的服务器实体证书签名值,以此构成一条信任链。

Https 原理与工作流程及证书链校验的更多相关文章
- 第2章 rsync算法原理和工作流程分析
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释. 以下是本文的姊妹篇: 1.rsync(一):基本命令和用法 2.rsync(二):ino ...
- rsync算法原理和工作流程分析
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释.本文不会介绍如何使用rsync命令(见rsync基本用法),而是详细解释它如何实现高效的增 ...
- rsync(三)算法原理和工作流程分析
在开始分析算法原理之前,简单说明下rsync的增量传输功能. 假设待传输文件为A,如果目标路径下没有文件A,则rsync会直接传输文件A,如果目标路径下已存在文件A,则发送端视情况决定是否要传输文件A ...
- 轻松理解Redux原理及工作流程
轻松理解Redux原理及工作流程 Redux由Dan Abramov在2015年创建的科技术语.是受2014年Facebook的Flux架构以及函数式编程语言Elm启发.很快,Redux因其简单易学体 ...
- 【Linux高级驱动】触摸屏工作原理与工作流程
触摸屏工作原理 触摸屏工作流程 @成鹏致远 (blogs:http://lcw.cnblogs.com) (email:wwwlllll@126.com) ) From WizNote
- 漫谈Github与开源,Git介绍以及Git的思想和基本工作原理 Git工作流程
漫谈Github与开源 文字亮点: 为什么这些优秀的工程师会开源自己的项目? 因为开源是一种精神. 无数的软件开发者苦心积虑保护自己的代码不被破解,而还是被聪明绝顶的脚本小子破解了,但破解无数软件的脚 ...
- Struts2的工作原理及工作流程
众所周知,Struts2是个非常优秀的开源框架,我们能用Struts2框架进行开发,同时能 快速搭建好一个Struts2框架,但我们是否能把Struts2框架的工作原理用语言表达清楚,你表达的原理不需 ...
- springmvc 运行原理 Spring ioc的实现原理 Mybatis工作流程 spring AOP实现原理
SpringMVC的工作原理图: SpringMVC流程 . 用户发送请求至前端控制器DispatcherServlet. . DispatcherServlet收到请求调用HandlerMappin ...
- 【关于selenium自动化中,Webdriver的原理以及工作流程】
原文地址:https://www.cnblogs.com/imyalost/p/7242747.html#4109245 作者:老 张 1.关于Webdriver 设计模式:按照Server-Clie ...
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...
随机推荐
- SpringBoot使用maven打jar包配置
在pom.xml文件中加入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactI ...
- Java8新特性Stream流
1.是什么? Stream(流)是一个来自数据源的元素队列并支持聚合操作 2.能干嘛? Stream流的元素是特定类型的对象,形成一个队列. Java中的Stream并不会存储元素,而是按需计算. 数 ...
- AtCoder Beginner Contest 071
第二次打日服... 感觉比较水.因为聚会的原因,还几十分钟结束的时候才打开电脑. D题就没看.难度不知. 题目链接http://abc071.contest.atcoder.jp/ ABC都水题. C ...
- 万界星空科技电子电器装配行业云MES解决方案
电子电器装配属于劳动密集型.科技含量较高的行业,产品零部件种类繁多,生产组装困难,生产过程存在盲点,同时也决定了生产流水线多且对自动化水平要求较高. 万界星空科技提供的电子行业解决方案,从仓储管理.生 ...
- markdown中插入视频前台渲染出来导致<video>等标签被转义成字符
markdown中插入视频前台渲染出来导致<video>等标签被转义成字符解决办法: 如图: 在markdown里面插入视频,可以按照下面写法,哈哈,虽然很捞,但是还是可以满足的. < ...
- Python——第五章:pickle模块
序列化:把对象转化成二进制字节 反序列化:把二进制字节转化回对象 Pickle模块的常见用法: Pickle.dunps 把对象(数据)转化成字节 Pickle.loads 把字节转化回对象( ...
- 记录一次K8s pod被杀的排查过程
问题描述 今天下午运维反馈说我们这一个pod一天重启了8次,需要排查下原因.一看Kiban日志,jvm没有抛出过任何错误,服务就直接重启了.显然是进程被直接杀了,初步判断是pod达到内存上限被K8s ...
- window10 AppX Deployment Service (AppXSVC)占用大量内存导致资源管理器卡死无响应
window10 AppX Deployment Service (AppXSVC)占用大量内存导致资源管理器卡死无响应,导致无法进入桌面打开软件等等. 1.打开任务管理的情况下,先结束卡死的资源管理 ...
- CSS实例-切换开关
在线展示: 矩形开关 .switch { position: relative; display: inline-block; width: 60px; height: 34px } .switch ...
- nginx在代理到upstream时转换http1.1为http1.0,长连接转为短连接
nginx在代理到upstream时的默认行为 最近准备用openresty替换nginx,替换的效果当然是需要保证效果和nginx一致,不然可能就会导致线上在用的服务出现问题. 替换成openres ...