• 【序】

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

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


  • 什么是根证书

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

  • 证书从哪里来的?

证书需要专门的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. [atAGC052C]Nondivisible Prefix Sums

    当1为$a_{i}$中出现次数最多的元素(之一),则有以下结论-- 结论:$a_{i}$合法当且仅当$P\not\mid \sum_{i=1}^{n}a_{i}$且$\sum_{i=1}^{n}[a_ ...

  2. 二、JAVA API实现HDFS

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

  3. spring boot 动态生成接口实现类

    目录 一: 定义注解 二: 建立动态代理类 三: 注入spring容器 四: 编写拦截器 五: 新建测试类 在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应的注解,并不需要实现对应的逻辑. ...

  4. idea插件 Background Image Plus 随机更换背景图片

    首先在市场搜索: Background Image Plus 设置图片: 在view中,有set 图片,有random图片,有clean图片的 设置就是用set,随便设置个路径. 重点来了,随机更换背 ...

  5. [省选联考 2021 A/B 卷] 图函数

    考虑到一件事情首先\(u -> u\)是可行的. 所以其实对于\(f(u,G')\) 只要考虑\([1,u]\)的点. 那么考虑其条件等价于\(u -> i\) 和 \(i -> u ...

  6. Anaconda 安装与卸载

    Anaconda是一个免费开源的Python和R语言的发行版本,用于计算科学(数据科学.机器学习.大数据处理和预测分析),Anaconda致力于简化软件包管理系统和部署.Anaconda的包使用软件包 ...

  7. R语言与医学统计图形-【30】流行病学数据可视化

    sjPlot包适用于社会科学.流行病学中调查数据可视化,且能和SPSS数据无缝对接(流行病学问卷调查录入Epidata软件后,都会转成SPSS格式或EXCEL格式保存). 辅助包sjmisc进行数据转 ...

  8. Linux系统的开机启动顺序

    Linux系统的开机启动顺序加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init一句inittab文件来设定系统运行的等级(一般3或者5,3是多用 ...

  9. SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制

    一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...

  10. Spring Cloud中五花八门的分布式组件我到底该怎么学

    分布式架构的演进 在软件行业,一个应用服务随着功能越来越复杂,用户量越来越大,尤其是互联网行业流量爆发式的增长,导致我们需要不断的重构应用的结构来支撑庞大的用户量,最终从一个简单的系统主键演变成了一个 ...