HTTPS及流程简析
【序】
在我们在浏览某些网站的时候,有时候浏览器提示需要安装根证书,可是为什么浏览器会提示呢?估计一部分人想也没想就直接安装了,不求甚解不好吗?
那么什么是根证书呢?在大概的囫囵吞枣式的百度之后知道了一些,但是还是很迷糊的,最终选择了解一下,首先在学习之前,抛出自己开始了解的时候一些迷糊的问题。
什么是根证书
静下心来之后在网上找了一通资料看了下,神奇的百度百科给的答案是“在密码学和计算机安全领域中,根证书是未被签名的公钥证书或自签名的证书”,一看这种话就有点虚,没办法官方的解释就是这么专业,专业到专业的人也看的很费劲。
证书从哪里来的?
证书需要专门的CA机构有偿颁发,其实自己也可以弄免费的吧,但是不知道人家会不会用你的,抛去一些繁杂的概念,通俗点大概就是一个存有一些信息的程序安装到你的浏览器,至于Https 就是Http+SSL的一种实现,SSL是一种安全传输协议,我在想我要是连HTTP都不知道的话,就没必要再对HTTPS的学习进行下去了。
什么是Https?
其实由上面一部分的介绍,我们就可以知道HTTPS就是一个安全的传输协议,为什么会安全呢,就是因为拥有了SSL(CA)证书,简单理解其实SSL证书就是CA证书,其中应该还牵扯到很多的专业知识,但是我并没有去深究,因为如果死磕一个点可能会误导学习的大方向。
执行流程
在利用Https请求访问安装了CA证书(或者是实现Https传输 的服务器时,客户端想要去访问,那么就需要在本地浏览器安装一个根证书。
现在很多浏览器都默认安装了主流的CA供应商提供的根证书,在访问同样安装证书的服务器的时候就不用安装了,同理我们自己也可以弄一个服务程序,再安装一个SSL证书,在客户端上也同样弄一套。
说点题外话,证书网上有免费的,如果足够牛的人,写一个应该也是没有难度的,至于其中实现的原理待以后再去探究,接下来详细描述一下请求交换的过程。
1.在我们安装了根证书的浏览器利用HTTPS请求服务端的时候,服务器会返回一个证书信息,其中包括
证书有效期信息、发证的CA供应商信息
一些扩展信息和数字签名(数字签名就是前面几个信息做了一个MD5的摘要并且用CA供应商提供的加密密钥加密了)
服务器自己生成的一个公钥、证书持有人信息
2.当客户端接收到信息之后首先会根据自己安装的根证书中的公钥解开证书中数字签名的信息以确定该证书是当前CA供应商提供的,但是还需要验证证书的正确性因为只是收到了证书。
3.此时客户端是不知道证书内容是否正确的,所以需要对收到的证书前几条信息同样做一个MD5摘要和解密出来的数字签名对比,如果相同就代表证书是正确且有效的。
4.接下来客户端开始访问服务端了,但在此时还没有完成检查,因为我们只是验证并且确定了证书的正确性,还没有确定当前访问的服务器是否是正确的服务器。
5.所以客户端需要利用证书中返回的公钥对需要发送的信息进行加密,然后发送到服务端,只有当服务端利用自己的私有解密密钥才能对请求的加密信息进行解密并且返回给客户端。
6.如果果验证通过那么客户端和服务端就会利用刚才发送的信息做为对称密钥来加密之后需要传输的信息。
按照上面步骤用加密解密保证了Https的安全性,由此对比Http协议请求是非常不安全的,但是在平时的web开发中如果不涉及重要信息,也还够用,如果真的有需要保证请求以及数据安全的场景,现在已经有成型的解决方案了。
假设从程序设计,客户端到服务端,到自定义数据协议,再到实现SSL的实现,以及其他一些我不知道的东西,仔细一想如果自己动手实现这一整个流程将会是巨大的工作量,而且在实现的背后需要强大的技术支撑。
HTTPS及流程简析的更多相关文章
- zxing二维码扫描的流程简析(Android版)
目前市面上二维码的扫描似乎用开源google的zxing比较多,接下去以2.2版本做一个简析吧,勿喷... 下载下来后定位两个文件夹,core和android,core是一些核心的库,android是 ...
- OpenStack Cinder源代码流程简析
版权声明:本博客欢迎转载,转载时请以超链接形式标明文章原始出处!谢谢! 博客地址:http://blog.csdn.net/i_chips 一.概况 OpenStack的各个模块都有对应的client ...
- LinkedHashMap结构get和put源码流程简析及LRU应用
原理这篇讲得比较透彻Java集合之LinkedHashMap. 本文属于源码阅读笔记,因put,get调用逻辑及链表维护逻辑复杂(至少网上其它文章的逻辑描述及配图,我都没看明白LinkedHashMa ...
- jquery选择器的实现流程简析及提高性能建议!
当我们洋洋得意的使用jquery强大的选择器功能时有没有在意过jquery的选择性能问题呢,其实要想高效的使用jquery选择器,了解其实现流程是很有必要的,那么这篇文章我就简单的讲讲其实现流程,相信 ...
- Tomcat启动流程简析
Tomcat是一款我们平时开发过程中最常用到的Servlet容器.本系列博客会记录Tomcat的整体架构.主要组件.IO线程模型.请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识. ...
- React Native 启动流程简析
导读:本文以 react-native-cli 创建的示例工程(安卓部分)为例,分析 React Native 的启动流程. 工程创建步骤可以参考官网.本文所分析 React Native 版本为 v ...
- 【Java虚拟机10】ClassLoader.getSystemClassLoader()流程简析
前言 学习类加载必然离开不了sun.misc.Launcher这个类和Class.forName()这个方法. 分析ClassLoader.getSystemClassLoader()这个流程可以明白 ...
- Postfix 发送邮件流程简析
PostFix接受和转发邮件的说明 来源ip符合inet_interfaces,收件人域符合mydestination, Postfix将接收到本地. 来源ip符合inet_interfaces, ...
- Go HTTP模块处理流程简析
Go语言提供完善的net/http包,用户使用起来非常方便简单,只需几行代码就可以搭建一个简易的Web服务,可以对Web路由.静态文件.cookie等数据进行操作. 一个使用http包建立的Web服务 ...
随机推荐
- lombok标签之@Data @AllArgsConstructor @@NoArgsConstructor -如何去除get,set方法。@Data注解和如何使用,lombok
在代码中我们可以只加上标签@Data 而不用get,set方法: val : 和 scala 中 val 同名, 可以在运行时确定类型; @NonNull : 注解在参数上, 如果该类参数为 null ...
- Part 27 Remove # from URL AngularJS
There are 4 simple steps to remove # from URLs in Angular. Step 1 : Enable html5mode routing. To do ...
- [bzoj1079]着色方案
由于最终的染色只与ci为几的个数有关,因此定义状态f[a][b][c][d][e][p]表示有a个ci=1,b个ci=2,--,有e个ci=5,上一次选择了ci=p的.状态的转移:发现p会让p-1少选 ...
- [bzoj1711]吃饭
由于无法直接将果汁和饮料连边,所以将人放在中间,果汁和饮料放在两侧,然后分别向对应的人连边.同时,为了保证每一个人只被算一次,对每一个人裂点,两个点中间连一条流量为1的边. 1 #include< ...
- [atARC084F]XorShift
如果异或变为加法和减法,那么根据扩欧,$k$合法当且仅当$k|\gcd_{i=1}^{n}a_{i}$ 换一种方式定义约数:$x$是$y$的约数当且仅当存在$p_{i}\in \{0,1\}$使得$\ ...
- [atARC099E]Independence
考虑这张图的反图,相当于这两个集合内部没有边,这也就是二分图的限制 换言之,我们要将这张图黑白染色(不能则为-1),$x$即为某种颜色的数个数 对于一个联通块,记连通块大小为$sz$,则白色点个数为$ ...
- springboot和mybatis集成
springboot和mybatis集成 pom <?xml version="1.0" encoding="UTF-8"?> <proje ...
- Dapr-可观测性
前言: 前篇-Actor构建块文章对Dapr的Actor构建块进行了解,本篇继续对可观测性 进行了解学习. 一.可观测性 用于获取可观察性的系统信息称为遥测. 它可以分为四大类: 分布式跟踪 提供有关 ...
- 洛谷 P4749 - [CERC2017]Kitchen Knobs(差分转换+dp,思维题)
题面传送门 一道挺有意思的思维题. 首先有一个 obvious 的结论,就是对于每个炉子,要么转到哪里都符合条件,要么存在唯一的最大值.对于转到哪儿都符合条件的炉子我们 duck 不必考虑它,故我们只 ...
- python-django 使用class重写视图和模板变量
基于类的视图 c Django模板语法 两个模板引擎如何进行模板文件的查找 模板引擎都找不到的时候,就照模块里面的模板 一旦找到模板不会继续查找了 注意:img_addr是必须和视图里面的变量名字保持 ...