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服务 ...
随机推荐
- Springboot 整合RabbitMq ,用心看完这一篇就够了
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...
- Java学习(十一)
今天学习了this和static关键字,这两个都是c++中学过的,但讲师还是讲了2个小时... 学得东西大部分都知道吧. this是当前对象的地址,类中带有static的方法不能使用this. 类中带 ...
- 问题 F: 背包问题
题目描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10):如果给你一个背包它能容纳的重量为m(10<=m<=20), ...
- Mybatis动态传入tableName--非预编译(STATEMENT)
在使用Mybatis过程中,你可以体会到它的强大与灵活之处,由衷的为Mybatis之父点上999个赞!在使用过程中经常会遇到这样一种情况,我查询数据的时候,表名称是动态的从程序中传入的,比如我们通过m ...
- [atAGC004F]Namori
考虑树的情况,将其以任意一点为根建树 对于每一个节点,考虑其要与父亲操作几次才能使子树内均为黑色,这可以用形如$(0/1,x)$的二元组来描述,其中0/1即表示其要求操作时父亲是白色/黑色且要操作$x ...
- [loj3500]矩阵游戏
为了方便,令$a_{i,j}$的下标范围为$[0,n]$和$[0,m]$,$b_{i,j}$的下标范围为$[1,n]$和$[1,m]$ 当确定$a_{i,0}$和$a_{0,j}$后,即可通过$b_{ ...
- [atAGC045E]Fragile Balls
构造一张有向图$G=([1,n],\{(a_{i},b_{i})\})$(可以有重边和自环),定义其连通块为将其看作无向图(即边无向)后分为若干个连通块 记$in_{i}$为$i$的入度(即最终盒子中 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十二):基于MybatisPlus插件TenantLineInnerInterceptor实现多租户功能
多租户技术的基本概念: 多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且 ...
- 第三方登陆-qq互联
看到很多网站都有第三方登陆,使用业余时间自己也要实现一个第三方登陆的功能: 1.登陆qq互联的网站:https://connect.qq.com/index.html 2.点击头像进行资料申请 --- ...
- CSS-sprit 雪碧图
CSS-sprit 雪碧图 可以将 多个小图片统一保存到一个大图片中,然后通过调整background-position来显示响应的图片 这样图片会同时加载到网页中 就可以避免出现闪烁 ...