• 【序】

在我们在浏览某些网站的时候,有时候浏览器提示需要安装根证书,可是为什么浏览器会提示呢?估计一部分人想也没想就直接安装了,不求甚解不好吗?

那么什么是根证书呢?在大概的囫囵吞枣式的百度之后知道了一些,但是还是很迷糊的,最终选择了解一下,首先在学习之前,抛出自己开始了解的时候一些迷糊的问题。


  • 什么是根证书

静下心来之后在网上找了一通资料看了下,神奇的百度百科给的答案是“在密码学和计算机安全领域中,根证书是未被签名的公钥证书或自签名的证书”,一看这种话就有点虚,没办法官方的解释就是这么专业,专业到专业的人也看的很费劲。

  • 证书从哪里来的?

证书需要专门的CA机构有偿颁发,其实自己也可以弄免费的吧,但是不知道人家会不会用你的,抛去一些繁杂的概念,通俗点大概就是一个存有一些信息的程序安装到你的浏览器,至于Https 就是Http+SSL的一种实现,SSL是一种安全传输协议,我在想我要是连HTTP都不知道的话,就没必要再对HTTPS的学习进行下去了。

  • 什么是Https?

其实由上面一部分的介绍,我们就可以知道HTTPS就是一个安全的传输协议,为什么会安全呢,就是因为拥有了SSL(CA)证书,简单理解其实SSL证书就是CA证书,其中应该还牵扯到很多的专业知识,但是我并没有去深究,因为如果死磕一个点可能会误导学习的大方向。

  • 执行流程

在利用Https请求访问安装了CA证书(或者是实现Https传输 的服务器时,客户端想要去访问,那么就需要在本地浏览器安装一个根证书。

现在很多浏览器都默认安装了主流的CA供应商提供的根证书,在访问同样安装证书的服务器的时候就不用安装了,同理我们自己也可以弄一个服务程序,再安装一个SSL证书,在客户端上也同样弄一套。

说点题外话,证书网上有免费的,如果足够牛的人,写一个应该也是没有难度的,至于其中实现的原理待以后再去探究,接下来详细描述一下请求交换的过程。

  • 1.在我们安装了根证书的浏览器利用HTTPS请求服务端的时候,服务器会返回一个证书信息,其中包括

    1. 证书有效期信息、发证的CA供应商信息

    2. 一些扩展信息和数字签名(数字签名就是前面几个信息做了一个MD5的摘要并且用CA供应商提供的加密密钥加密了)

    3. 服务器自己生成的一个公钥、证书持有人信息

  • 2.当客户端接收到信息之后首先会根据自己安装的根证书中的公钥解开证书中数字签名的信息以确定该证书是当前CA供应商提供的,但是还需要验证证书的正确性因为只是收到了证书。

  • 3.此时客户端是不知道证书内容是否正确的,所以需要对收到的证书前几条信息同样做一个MD5摘要和解密出来的数字签名对比,如果相同就代表证书是正确且有效的。

  • 4.接下来客户端开始访问服务端了,但在此时还没有完成检查,因为我们只是验证并且确定了证书的正确性,还没有确定当前访问的服务器是否是正确的服务器。

  • 5.所以客户端需要利用证书中返回的公钥对需要发送的信息进行加密,然后发送到服务端,只有当服务端利用自己的私有解密密钥才能对请求的加密信息进行解密并且返回给客户端。

  • 6.如果果验证通过那么客户端和服务端就会利用刚才发送的信息做为对称密钥来加密之后需要传输的信息。

按照上面步骤用加密解密保证了Https的安全性,由此对比Http协议请求是非常不安全的,但是在平时的web开发中如果不涉及重要信息,也还够用,如果真的有需要保证请求以及数据安全的场景,现在已经有成型的解决方案了。

假设从程序设计,客户端到服务端,到自定义数据协议,再到实现SSL的实现,以及其他一些我不知道的东西,仔细一想如果自己动手实现这一整个流程将会是巨大的工作量,而且在实现的背后需要强大的技术支撑。

HTTPS及流程简析的更多相关文章

  1. zxing二维码扫描的流程简析(Android版)

    目前市面上二维码的扫描似乎用开源google的zxing比较多,接下去以2.2版本做一个简析吧,勿喷... 下载下来后定位两个文件夹,core和android,core是一些核心的库,android是 ...

  2. OpenStack Cinder源代码流程简析

    版权声明:本博客欢迎转载,转载时请以超链接形式标明文章原始出处!谢谢! 博客地址:http://blog.csdn.net/i_chips 一.概况 OpenStack的各个模块都有对应的client ...

  3. LinkedHashMap结构get和put源码流程简析及LRU应用

    原理这篇讲得比较透彻Java集合之LinkedHashMap. 本文属于源码阅读笔记,因put,get调用逻辑及链表维护逻辑复杂(至少网上其它文章的逻辑描述及配图,我都没看明白LinkedHashMa ...

  4. jquery选择器的实现流程简析及提高性能建议!

    当我们洋洋得意的使用jquery强大的选择器功能时有没有在意过jquery的选择性能问题呢,其实要想高效的使用jquery选择器,了解其实现流程是很有必要的,那么这篇文章我就简单的讲讲其实现流程,相信 ...

  5. Tomcat启动流程简析

    Tomcat是一款我们平时开发过程中最常用到的Servlet容器.本系列博客会记录Tomcat的整体架构.主要组件.IO线程模型.请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识. ...

  6. React Native 启动流程简析

    导读:本文以 react-native-cli 创建的示例工程(安卓部分)为例,分析 React Native 的启动流程. 工程创建步骤可以参考官网.本文所分析 React Native 版本为 v ...

  7. 【Java虚拟机10】ClassLoader.getSystemClassLoader()流程简析

    前言 学习类加载必然离开不了sun.misc.Launcher这个类和Class.forName()这个方法. 分析ClassLoader.getSystemClassLoader()这个流程可以明白 ...

  8. Postfix 发送邮件流程简析

      PostFix接受和转发邮件的说明 来源ip符合inet_interfaces,收件人域符合mydestination, Postfix将接收到本地. 来源ip符合inet_interfaces, ...

  9. Go HTTP模块处理流程简析

    Go语言提供完善的net/http包,用户使用起来非常方便简单,只需几行代码就可以搭建一个简易的Web服务,可以对Web路由.静态文件.cookie等数据进行操作. 一个使用http包建立的Web服务 ...

随机推荐

  1. WPF嵌入Unity3D之后,unity3D程序的键盘和鼠标事件无法触发(3D程序的焦点无法激活)的解决方案

    目前最通用的客户端调用3D的方式,就是WPF程序通过Process启动Unity3D的exe进程,直接上代码: //开启3D进程 internal void Create3DProcess(strin ...

  2. python实现开闭操作

    目录: 开闭操作的作用 (一)开操作 (二)闭操作 (三)开操作完成其他任务 (1)提取水平垂直线 (2)消除干扰线 (3)提取满足要求的形状 开闭操作的作用: (一)开操作(特点作用:消除噪点--- ...

  3. [atARC103F]Distance Sums

    给定$n$个数$d_{i}$,构造一棵$n$个点的树使得$\forall 1\le i\le n,\sum_{j=1}^{n}dist(i,j)=d_{i}$ 其中$dist(i,j)$表示$i$到$ ...

  4. 二、JAVA API实现HDFS

    目录 前文 hdfsdemo通过HDFS上传下载文件 windows环境下需要使用uitls.exe 为pom.xml增加依赖 新建java文件HDFS_CRUD GitHub下载地址 前文 一.Ce ...

  5. 如何在C#中使用Google.Protobuf工具

    protobuf是一个语言无关.平台无关的序列化协议,由谷歌开源提供.再加上其高性能.存储占用更小等特点,在云原生的应用中越来越广泛. 在C#中主要有两种方法来使用protobuf协议,nuget包分 ...

  6. SpringCloud升级之路2020.0.x版-45. 实现公共日志记录

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们这一节在前面实现的带有链路信息的 Publisher 的工厂的基础上,实现公共日志记录 ...

  7. 洛谷 P6276 - [USACO20OPEN]Exercise P(组合数学+DP)

    洛谷题面传送门 废了,又不会做/ll orz czx 写的什么神仙题解,根本看不懂(%%%%%%%%% 首先显然一个排列的贡献为其所有置换环的乘积.考虑如何算之. 碰到很多数的 LCM 之积只有两种可 ...

  8. Atcoder Regular Contst 084 D - XorShift(bitset)

    洛谷题面传送门 & Atcoder 题面传送门 没错,这就是 Small Multiple 那场的 F,显然这种思维题对我来说都是不可做题/cg/cg/cg 首先如果我们把每个二进制数看作一个 ...

  9. 洛谷 P3266 - [JLOI2015]骗我呢(容斥原理+组合数学)

    题面传送门 神仙题. 首先乍一看此题非常棘手,不过注意到有一个条件 \(0\le x_{i,j}\le m\),而整个矩阵恰好有 \(m\) 列,这就启发我们考虑将每个元素的上下界求出来,如果我们第一 ...

  10. Codeforces 453E - Little Pony and Lord Tirek(二维线段树+ODT)

    Codeforces 题目传送门 & 洛谷题目传送门 一道难度 *3100 的 DS,而且被我自己搞出来了! 不过我终究还是技不如人,因为这是一个 \(n\log^2n\) + 大常数的辣鸡做 ...