一。HTTP隐患

客户端向服务器发送HTTP请求,服务器收到请求后返回响应给客户端:


抓包如图:

我们可以发现:HTTP报文明文传输(而TCP/IP是可能被窃听的网络);且客户端跟服务器之间没有任何身份的确认;
假如黑客截获客户端发给服务器的信息,并造假数据返回给客户端。客户端是无感知的。所以HTTP请求存在如下风险:

(1) 窃听风险:第三方可以获知通信内容。

(2) 篡改风险:第三方可以修改通信内容。

(3) 冒充风险:第三方可以冒充他人身份参与通信。

二。加密算法简介

在讲HTTPS前先了解下常见的加密算法~

  1. 对称加密算法(DES、3DES、AES)
    生成一个密钥key,加密解密都是这个key。
  2. 非对称加密算法(RSA、DSA)

    生成一个公钥P-key,一个私钥S-Key。公钥加密,私钥解密。也可以私钥加密,公钥解密。

  3. 哈希算法(md5,sha-1..)

    固定的内容能通过哈希算法生成生成一段特定长度的唯一的Hash值。内容一旦变更,生成的hash值也会变更。

  4. 数字签名

    签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。

三。HTTP向HTTPS演化过程

防止窃听,通信内容加密

为了防止被窃听,研究人员开始尝试对通信内容本身加密,即HTTP报文加密后再发送请求,这样的话就需要客户端跟服务器同时具备加密解密功能。

  1. 对称加密算法加密

    密钥由一方产生,传给另一方。此后两端的传输就通过密钥加密传输。解决了数据的裸奔状况。但是密钥的传输是铭文传输,所以还是有问题。

    优点:

    使用key对传输数据加密。黑客不晓得这个key的话,就无法解密传输数据。

    漏洞:

    (1)密钥如何传输,传输过程很有可能被劫持。密钥一旦泄露。上述隐患照样发生。

    (2)不同的客户端,服务器。双方都需要维护大量的密钥,维护成本太高

  2. 对称加密不合适后,想到了采用非对称加密算法加密。

    首先服务器将公钥传送给浏览器。浏览器向服务器传数据就用公钥加密,服务器用私钥解密。服务器向客户端传输数据采用私钥加密,客户端用公钥解密。这就有问题了,公钥匙公开的,黑客窃取公钥后,也能对服务器向客户端传输的数据解密查看了。

    优点:

    (1)客户端持有公钥,服务器持有私钥。相对对称加密降低维护成本。
    缺点:
    (1)公钥是公开的,黑客可以拿到公钥。所以服务器传给客户端的私钥加密的数据(第4步)。黑客可以劫持并解密服务端传给客户端的数据。

  3. 那采用非对称+对称呢?

    服务器有一对非对称密钥(公钥key1和私钥key1_1),公钥传送给客户端。

    客户端有一对对成密钥key2,密钥通过公钥加密传给服务器。只能服务器通过私钥解密获取到这个对称密钥。

    之后的数据传输都采用对称加密。


    优点:
    (1)节省了密钥的维护成本。
    (2)保证了对称密钥不会被第三方拿到。保证了数据不会泄露。

防止篡改,数字签名解决

文件通过hash算法拿到hash值,称为摘要。再使用私钥对hash值加密,生成数字签名。服务器将数字签名跟文件放一起,发给客户端。

客户端收到后,先使用公钥解密签名,拿到摘要。证明了是服务器发的。如果再将文件通过hash加密得到的hash值跟摘要做对比,相等则说明文件没有被篡改。

防止冒充,公钥证书来解决

只对内容加密无法防止第三方攻击
加密算法虽然保证了数据传输过程加密。忽略了服务器向客户端传输公钥这步。服务器传输公钥是明文传输。如果黑客截取到公钥key1。他就可以用自己的非对称密钥key3,代替key1 传给客户端。客户端无感知,就会用key3去加密传输,黑客用自己的私钥key3_3解密。然后用key1加密伪造数据传给服务器。。。就是说黑客完全控制了整个传输过程。
总结:加密内容的基础上,被冒充的根本原因,是客户端无法判断他拿到的公钥是服务器的,还是第三方的。这就需要一个公钥证书来证明公钥的真实性。

  1. 什么是公钥证书(数字证书/证书)
    即证明公开秘钥的证书。
    公钥证书是由值得信任的第三方数字证书认证机构(CA)和其他相关机关颁发,用以证明服务器和客户端是实际存在的。伪造证书从技术角度来说是异常困难的一件事。所以只要能够确定通信方(服务器和客户端)持有的证书,即可判断通信方的身份。客户端发送https的请求时会先从服务器下载证书,然后客户端会自动验证证书的真实性

2. 数字签名

这里CA机构的数字签名跟认证,就是上文说的防止篡改提到的数字签名解决解决思路。只不过上文保证的是文件没有被篡改。这里CA机构保证的是公钥的合法性跟公钥没被篡改。

3.  证书都有啥,可以点击浏览器网址栏前的锁,查看证书详情。

四。HTTPS的原理

说了这么多,那到底什么是HTTPS呢?

HTTPS 其实就是HTTP+SSL(安全套接字层)/TLS(传输层安全),即 HTTP 下加入 SSL 层。互联网的通信安全,建立在SSL/TLS协议之上,而SSL/TLS协议的基本思路是采用公钥加密法,简单来说就是,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

HTTP+加密+认证+完整性保护=HTTPS

通信内容混合加密+使用数字证书=SSL

SSL/TLS协议

上述加密过程的完善+证书的结合,就形成了目前的SSL/TLS协议。

SSL协议大概的流程是:

SSL的优势(HTTPS的优势):

(1) 所有信息都是加密传播,第三方无法窃听。

(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。

(3) 配备身份证书,防止身份被冒充。

五。总结之HTTP跟HTTPS的区别

    1. HTTP是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    2. HTTPS需要一定费用,证书很少免费。

    3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    4. https请求没有HTTP请求快。因为SSL通信慢且会大量消耗cpu和内存资源导致处理速度慢。

HTTPS原理剖析的更多相关文章

  1. 爬虫前篇 /https协议原理剖析

    爬虫前篇 /https协议原理剖析 目录 爬虫前篇 /https协议原理剖析 1. http协议是不安全的 2. 使用对称秘钥进行数据加密 3. 动态对称秘钥和非对称秘钥 4. CA证书的应用 5. ...

  2. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...

  3. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...

  4. 【Xamarin挖墙脚系列:Xamarin.IOS机制原理剖析】

    原文:[Xamarin挖墙脚系列:Xamarin.IOS机制原理剖析] [注意:]团队里总是有人反映卸载Xamarin,清理不完全.之前写过如何完全卸载清理剩余的文件.今天写了Windows下的批命令 ...

  5. 【Xamarin 跨平台机制原理剖析】

    原文:[Xamarin 跨平台机制原理剖析] [看了请推荐,推荐满100后,将发补丁地址] Xamarin项目从喊口号到现在,好几个年头了,在内地没有火起来,原因无非有三,1.授权费贵 2.贵 3.原 ...

  6. 【Xamain 跨平台机制原理剖析】

    原文:[Xamain 跨平台机制原理剖析] [看了请推荐,推荐满100后,将发补丁地址] Xamarin项目从喊口号到现在,好几个年头了,在内地没有火起来,原因无非有三,1.授权费贵 2.贵 3.原生 ...

  7. 写给 Android 应用工程师的 Binder 原理剖析

    写给 Android 应用工程师的 Binder 原理剖析 一. 前言 这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔.生怕自己理解上还有偏差,对大家造成误解,贻笑大方.又怕自己理 ...

  8. NameNode和SecondaryNameNode工作原理剖析

    NameNode和SecondaryNameNode工作原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode中的元数据是存储在那里的? 1>.首先,我 ...

  9. NameNode与DataNode的工作原理剖析

    NameNode与DataNode的工作原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS写数据流程 >.客户端通过Distributed FileSyst ...

随机推荐

  1. Spring Boot学习笔记(二)——HelloWorld实现

    提示:要在Eclipse里使用Spring Boot,首先要安装STS插件,前面我们已经安装了STS插件了,可以创建Spring Boot项目了. 1.创建项目: 新建项目,选择Spring Boot ...

  2. 关于“Cannot resolve table 'user'”报错的问题解决

    springboot+vue建立映射时,后端引用@Table(name="user") 来对应表名 user,但引用后报错"Cannot resolve table 'u ...

  3. 在国内使用Google验证码reCaptcha

    如今各大网站都不可缺少的一部分就是验证码,验证码具有防止恶意批量操作,保护账户安全等作用.但是现在各种暴力破解验证码的手段层出不穷,验证码的保护也就失去了意义.所以各大平台为了应对这种情况也是使用类似 ...

  4. 【实战】记一次老项目的swagger整合

    1.背景 这两天接到一个整合swagger的任务,本以为很简单,预计两小时内完成,没想到其中有太多的坑,整了两天才完成. 首先项目是一个比较老的项目,之前用的servlet,目前在重构为springm ...

  5. C# stopwatch的简单使用(计算程序执行时间)

    首先添加引用 using System.Diagnostics;//stopwatch的引用 //声明变量 Stopwatch a=new Stopwatch();//PS:这里一定要new(实例化) ...

  6. 用GitHub Pages搭建博客(二)

    本篇介绍基本GitHub Pages的搭建流程 GitHub账号及仓库创建 登录GitHub,录入用户名.邮箱.密码,创建成功后登录进入. 注册时,邮箱建议不使用QQ邮箱.因为一些第三方部署类网站不支 ...

  7. StrongArray

    * System类中包含了一个static void arraycopy(object src,int srcops,object dest ,int destpos, int length )方法, ...

  8. 测试TwemProxy的应知应会

    一.背景 最近中间件开发组对twemproxy的发现注册机制做了改造,之前没有接触过twemproxy,借这次测试的机会,初步学习了一下twemproxy相关的知识:下面用"测试语言&quo ...

  9. 虚拟环境及venv和virtualenv

    一.虚拟环境概述 Python应用程序通常会使用不在标准库内的软件包和模块.应用程序有时需要特定版本的库,修复特定的错误,或者可以使用库的过时版本的接口编写应用程序. 这说明一个Python安装可能无 ...

  10. C++ storage allocation + Dynamic memory allocation + setting limits + initializer list (1)

    1. 对象的空间在括号开始就已经分配,但是构造在定义对象的时候才会实现,若跳过(譬如goto),到括号结束析构会发生错误,编译会通不过. 2.初始化 1 struct X { int i ; floa ...