我终于彻底理解了https原理!!!激动之下,写一篇博客,搞一波分享!!!

本篇博客比较精彩的地方:

思维方式:也是借鉴一位大佬的,写得很棒。https://blog.csdn.net/guolin_blog/article/details/104546558

图文并茂,简单明了,化繁为简。

关于https原理,有非常非常多的博客,然而其中很多博主都不一定完全理解,只是单纯地为了写博客而写博客。

基础知识铺垫

虽然我们不一定是专门搞密码学的,但多多少少还是要知道一点的。不然的话,接下来的知识可能无法理解。

1、对称加密算法:加密和解密使用相同的密钥。

2、非对称加密算法:加密和解密使用不同的密钥,一个成为公钥,另一个则是私钥,两者是成对的。公钥用来加密,私钥用来解密。

备注:https原理中,这两种算法都用到了。至于其他加密算法,咱就不多说了。

http传输原理

(其实呢,浏览器和服务器之间信息传输并不是直接的,中间还会有个中间路由。)

解释一下http到底不安全在哪里



正如图中所看到的,如果有人通过中间路由恶意篡改传输的信息,那会怎样?浏览器接收到的信息都被篡改了,后果不堪设想。

https因此诞生。在http基础上加上了SSL/TLS协议。就是为了防止以上的这种情况。

思维风暴:

试想,如果是我们,我们会怎么处理这种情况呢?跟着这个思维走下去,你便会提现到这种思维的魅力

首先,我们很自然地会想到,信息在传输期间进行加密,浏览器和服务器那边再进行解密。这样的话,即使监听者得到了这些信息,他也无法进行解密。这样便安全了。

那又有问题了,以上这种加密便是采用的对称加密,那密钥怎么得到呢?

我们知道,浏览器一开始是向服务器发送请求的,那密钥必定是浏览器发给服务器的。这样的话,监听者还是可以通过中间路由得到这个密钥,然后通过密钥进行解密,治标不治本。或者直接随便恶意篡改这个密钥,后果可想而知。那怎么办呢?

我们可能也很自然地想到,如果把浏览器发给服务器的密钥进行加密,不就可以了吗?这样的话,的确解决了问题。

把浏览器发给服务器的密钥进行加密,我们很自然地会想到,使用非对称加密算法便可以实现。那怎么做到这一点呢?

这也是个计算机届的难题,卡在这儿,走不下去了。

某一天,某个天才突然想到了,浏览器给服务器发送一个请求。打破常规,如果请求两次呢?第一次只请求公钥,得到公钥后,浏览器生成一个密钥(这里称作浏览器密钥),使用公钥进行加密,第二次请求附带上使用公钥进行加密的浏览器密钥,服务器接收后,使用私钥进行解密不就得到了浏览器密钥吗?接下来,传输信息,只需通过浏览器密钥进行加密解密不就成了。这样的话,问题不就解决了吗?的确如此。

最后一个问题,服务器端的公钥和私钥怎么来的呢?

这便诞生出了CA机构。

CA机构专门给网站服务器端添加公钥和私钥(就是所谓的数字签名证书),当然还有一些其他的信息,比如网站域名、证书有效期等。

还有一点要说明一下,浏览器是如何验证公钥的?

浏览器得到服务器发送的公钥后,会和系统内置的证书进行比对便可验证真假了。

总结:

https原理:

1、浏览器给服务器发送一个http请求,得到公钥。

2、将公钥和系统内置证书进行对比,并验证有效期,然后生成一个随机浏览器密钥并使用公钥加密,接着再发送一个http请求。

3、服务器接收到用公钥加密的浏览器密钥后,使用私钥进行解密。

4、接下来传输便通过浏览器密钥进行加密解密。即使监听者通过中间路由接收到了信息,也无法解密,恶意篡改的话,浏览器和服务器端会识别到,中断连接。这样的话,便安全了。

怎么升级到https?

将http升级到https,比较简单,购买SSL证书,然后将证书安装到网站服务器端即可。一般而言,购买SSL证书的话,第一年是免费的,然后每年差不多要4k左右。(还挺贵的。。。)当然了,http升级到https,网站访问速度要稍微降低一些的,毕竟有个加密解密的过程嘛!

知识在于分享传播,在分享传播的过程中,会逐步进行凝练和升华!

彻底搞懂https原理的更多相关文章

  1. 这一次搞懂SpringMVC原理

    @ 目录 前言 正文 请求入口 组件初始化 调用Controller 参数.返回值解析 总结 前言 前面几篇文章,学习了Spring IOC.Bean实例化过程.AOP.事务的源码和设计思想,了解了S ...

  2. 一张图搞懂Ajax原理

    本文整理在,我的github上.欢迎Star. 原理 说起ajax,就不得不说他背后的核心对象XMLHttpRequest,而说到XMLHttpRequest我觉得,从它的readyState状态说起 ...

  3. 看完让你彻底搞懂Websocket原理

    偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗 ...

  4. 转--看完让你彻底搞懂Websocket原理

    偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗 ...

  5. 一文搞懂 ThreadLocal 原理

    当多线程访问共享可变数据时,涉及到线程间同步的问题,并不是所有时候,都要用到共享数据,所以就需要线程封闭出场了. 数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的 ...

  6. 一文搞懂RPC原理

    RPC原理解析 什么是RPC RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.R ...

  7. 搞懂WebSocket原理

    一.websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 首先HTTP有 1 ...

  8. 搞懂分布式技术9:Nginx负载均衡原理与实践

    搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...

  9. 搞懂分布式技术10:LVS实现负载均衡的原理与实践

    搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一 ...

随机推荐

  1. Python语言及其应用|PDF高清完整版免费下载|百度云盘|Python

    百度云盘:Python语言及其应用PDF高清完整版免费下载 提取码:6or6 内容简介 本书介绍Python 语言的基础知识及其在各个领域的具体应用,基于最新版本3.x.书中首先介绍了Python 语 ...

  2. 2.pandas的数据结构

    对于文件来说,读取只是最初级的要求,那我们要对文件进行数据分析,首先就应该要知道,pandas会将我们熟悉的文件转换成了什么形式的数据结构,以便于后续的操作 数据结构 pandas对文件一共有两种数据 ...

  3. Redis系列(九):Redis的事务机制

    提到事务,相信大家都不陌生,事务的ACID四大特性,也是面试时经常问的,不过一般情况下,我们可能想到的是传统关系型数据库的事务,其实,Redis也是提供了事务机制的,本篇博客就来讲解下Redis的事务 ...

  4. Python Tuple(元组) max()方法

    描述 Python 元组 max() 函数返回元组中元素最大值.高佣联盟 www.cgewang.com 语法 max()方法语法: max(tuple) 参数 tuple -- 指定的元组. 返回值 ...

  5. PHP debug_zval_dump() 函数

    debug_zval_dump 函数用于查看一个变量在zend引擎中的引用计数.类型信息. 版本要求:PHP 4 >= 4.2.0, PHP 5, PHP 7高佣联盟 www.cgewang.c ...

  6. PHP decoct() 函数

    实例 把十进制转换为八进制: <?phpecho decoct("30") . "<br>";echo decoct("10&quo ...

  7. PHP sqrt() 函数

    实例 返回不同数的平方根: <?phpecho(sqrt(0) . "<br>");echo(sqrt(1) . "<br>"); ...

  8. P6222 「简单题」加强版 莫比乌斯反演 线性筛积性函数

    LINK:简单题 以前写过弱化版的 不过那个实现过于垃圾 少预处理了一个东西. 这里写一个实现比较精细了. 最后可推出式子:\(\sum_{T=1}^nsum(\frac{n}{T})\sum_{x| ...

  9. Python创建一个爬虫项目===从零开始哟!想说的下次 要不要出一期关于pycharm与Python之间的合作

    当然,不用爬虫框架,也是可以的 比如说 beauitfulsoup xml http 就可以完美的得到一个爬虫的解决方案! 个人的意思是,新手或者刚入门的可以考虑以上的方式进行练习后 在使用框架 首先 ...

  10. c++ 模板类的 友元函数

    #pragma once #include <iostream> template <class T> class stack { template <class Ty& ...