【JAVA秒会技术之秒懂HTTPS】白话图解HTTPS原理

本文涉及的产品
云解析 DNS,旗舰版 1个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
全局流量管理 GTM,标准版 1个月
简介: 白话图解HTTPS原理         【前言】最近看过几篇文章,内容是关于“全民HTTPS”的。为什么HTTPS,突然会受到如此多业内人士的青睐呢?HTTPS究竟是什么呢?它与HTTP又有怎样的区别呢?     带着这个问题,我查看了很多网上的资料,但是太多的专业词汇,让我感到头疼,很难理解。按我个人的认知,这个世界上根本不存在任何高深的道理,尤其是西方讲究科学性的思维,再高深,也

白话图解HTTPS原理

 

      【前言】最近看过几篇文章,内容是关于“全民HTTPS”的。为什么HTTPS,突然会受到如此多业内人士的青睐呢?HTTPS究竟是什么呢?它与HTTP又有怎样的区别呢?

    带着这个问题,我查看了很多网上的资料,但是太多的专业词汇,让我感到头疼,很难理解。按我个人的认知,这个世界上根本不存在任何高深的道理,尤其是西方讲究科学性的思维,再高深,也不可能高深过中国传统思想中的八个字“只可意会,不可言传”,完全不该诉你,让你自己去领悟,这多难啊。

        所以,我又耐着性子,参照翟志军的《也许,这样理解HTTPS更容易》一文,以及百度词条的相关定义,用类比的方法,追根溯源,重新梳理一下,才恍然大悟。本着分享的精神,我就把自己所感所悟的过程记录下来,希望大家读罢此文,也能有所感悟!

       【思考一:为什么HTTPS会突然受到青睐?

    答案就四个字——HTTP劫持

       【思考二:什么是HTTP劫持?

        官方解释:什么是HTTP劫持呢,大多数情况是运营商HTTP劫持,当我们使用HTTP请求请求一个网站页面的时候,网络运营商会在正常的数据流中插入精心设计的网络数据报文,让客户端(通常是浏览器)展示“错误”的数据,通常是一些弹窗,宣传性广告或者直接显示某网站的内容。

        通俗解释你预定了某类军事杂志类比“客户端向服务器发送了一条请求,访问军事网站”,此时黑心快递员类比“不要脸的运行商或黑客”拆封了你的快递类比“劫持了你的正常数据流”,然后在军事杂志的每一页,都贴上了“包小姐”的小广告类比精心设计的网络数据报文,再送行打包送给你,获得额外盈利。

       【引申:什么是DNS劫持?

        官方解释DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务或诈骗钱财的目的。

        通俗解释高考填报考时,你在志愿书上填写了“北大”类比“正常请求”,但是你的前任偷走了你的志愿书类比“劫持了DNS服务器”,把他改成了“北大某鸟”。最后的结果就是,你以690分的成绩考入了北大某鸟类比“最终访问了假网址”,然后还伪装北大招生办,让你往某银行卡打入5千元学费(类比“后续诈骗钱财”)。

       【一句话概括:HTTP劫持与DNS劫持的区别?

        HTTP劫持:你打开的是人民日报的官方网站,右下角却弹出了蓝翔的挖掘机广告。

        DNS劫持:你在地址栏输入的是人民日报的网页地址,却打开了淘宝特卖的钓鱼网站。

       【思考三:HTTP为什么会被劫持?

         一句话:HTTP在传输的过程中使用的是明文

通俗解释你在快递东西的时候,快递员是可以看到你的物品的,这样,他就可以随意更换篡改你的东西。

       【思考四:如何避免HTTP明文的不良影响呢?(推演HTTPS协议的前世今生)

        1.最先想到的就是对明文进行加密,比如各种对称加密(DES);

         

    安全成立的条件:S足够安全,且只有A和B知道;

    但是这样就可以了吗?——远没想象那么简单!

    如果服务器端B对所有的客户端通信A都使用同样的对称加密算法S,那么,这是不是就可以轻易破解,也就无异于没有加密了呢?

          

         2.如何即能使用对称加密算法,又不公开密钥?

    答:Web服务器与每个客户端使用不同的对称加密算法:

          

         3.服务器端B怎么告诉客户端A该使用哪种对称加密算法S呢?

         答:通过协商。

          

    但是,这样就安全了吗?——依然没有,因为这个协商过程,本身又是裸露的,依然可以被获知,那么怎么办呢?

有人说继续对“协商内容”进行加密,那么,此时你有没有发现,已经陷入一个死循环了呢?

          

         4.如何解决这种对称加密的死循环呢?

    答:用非对称加密(常用RSA)。

         5.什么是非对称加密?

         官方解释对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

         通俗解释政府的财政收入(类比“私钥加密后的密文”),只要是公民,都有权知道(类比“只要是公钥,都可以解密”);但是公民个人的收入(类比“公钥加密后的密文”),除了自己,只有政府才可以知道,其他人不行(类比“只有私钥可以解密”)。中国政府只有一个,但公民是有很多的(类比“私钥只有一个人有,而公钥可以发给所有的人”)。

          

        此时你应该明白了:HTTPS同时需要对称加密算法和非对称加密算法

        6.要达到Web服务器针对每个客户端使用不同的对称加密算法,同时,我们也不能让第三者知道这个对称加密算法是什么,怎么办?

        答:使用随机数。就是使用随机数来生成对称加密算法。这样就可以做到服务器和客户端每次交互都是新的加密算法、只有在交互的那一该才确定加密算法。

    此时,你明白为什么HTTPS协议握手阶段会有这么多的随机数了吧。

        7.如何让客户端安全地得到公钥呢?

        答:两种假设:

        ①让服务器端将公钥放到一个远程服务器,客户端可以请求得到;

        ②让服务器端将公钥发送给每一个客户端;

    先看假设①,将公钥放到一个远程服务器,客户端又需要发送请求才能得到。注意,一旦有请求,又有明文,又回到那个死循环了。显然不可以!

    再看假设②,仍然有一个问题:如果服务器端发送公钥给客户端时,被中间人调包了,怎么办?显然不可以!

为了方便能理解,请看下图:

         

        8.如何解决公钥被调包的隐患呢?

        公钥被调包的问题出现,是因为我们的客户端无法分辨返回公钥的人到底是中间人,还是真的服务器。这其实就是密码学中提的身份验证问题。

        问题的关键在于:我们选择直接将公钥传递给客户端的方案,我们始终无法解决公钥传递被中间人调包的问题。

所以,我们不能直接将服务器的公钥传递给客户端,而是第三方机构使用它的私钥对我们的公钥进行加密后,再传给客户端。客户端再使用第三方机构的公钥进行解密,这样就引出了数字证书的概念。

        9.什么是数字证书?

        官方解释:数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。数字证书是一种权威性的电子文档,可以由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级CA系统进行签发。

         

        说明:证书中只有服务器交给第三方机构的公钥,而且这个公钥被第三方机构的私钥加密了。如果能解密,就说明这个公钥没有被中间人调包。因为如果中间人使用自己的私钥加密后的东西传给客户端,客户端是无法使用第三方的公钥进行解密的。

        但是第三方机构不可能只给你一家公司制作证书,它也可能会给中间人这样有坏心思的公司发放证书。这样的,中间人就有机会对你的证书进行调包,客户端在这种情况下是无法分辨出是接收的是你的证书,还是中间人的。因为不论中间人,还是你的证书,都能使用第三方机构的公钥进行解密。

        这样,又出现了不安全因素,像下面这样:

         

        10.如何解决同一机构颁发的不同证书被篡改的问题呢?

    要解决这个问题,我们首先要想清楚11和12这两个问题:

        11.谁来负责辨别同一机构下不同证书呢?

        答:客户端。客户端在拿到证书后,自己就有能力分辨证书是否被篡改了。

        12.如何才能拥有分辨证书是否被篡改的能力呢?

        答:使用数字证书。我们从现实中找灵感。比如你是HR,你手上拿到候选人的学历证书,证书上写了持证人,颁发机构,颁发时间等等,同时证书上,还写有一个最重要的:证书编号!我们怎么鉴别这张证书是的真伪呢?只要拿着这个证书编号上相关机构去查,如果证书上的持证人与现实的这个候选人一致,同时证书编号也能对应上,那么就说明这个证书是真实的。

       13.客户端本地怎么验证证书呢?

    让证书本身写上“如何根据证书的内容生成证书编号”。也就是:客户端拿到证书后,根据证书上的方法自己生成一个证书编号,如果自己生成的证书编号与证书上的证书编号相同,那么说明这个证书是真实的。同时,为避免证书编号本身又被调包,所以使用第三方的私钥进行加密。

        这地方有些抽象,我们来个图帮助理解:

        

        当客户端拿到证书后,开始对证书中的内容进行验证,如果客户端计算出来的证书编号与证书中的证书编号相同,则验证通过。

        14.这么多机器,第三方机构的公钥怎么跑到了客户端的机器中呢?

        其实呢,现实中,浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥)。因为客户端接收到的证书中会写有颁发机构,客户端就根据这个颁发机构的值在本地找相应的公钥。

       【类比总结

        上边例子中:

        所提到的证书,其实就是HTTPS中的数字证书

        所提到的证书编号就是HTTPS中的数字签名

        所提到的第三方机构就是指数字证书签发机构(CA)

       【一句话总结HTTPS的原理

        HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构(CA)颁发的证书来保证非对称加密过程本身的安全,为了保证证书不被篡改,引入数字签名,客户端使用相同的对称加密算法,来验证证书的真实性,如此,最终解决了客户端与服务器端之间的通信安全问题。

        


相关文章
|
28天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
52 11
|
1月前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
65 7
|
2月前
|
安全 算法 网络安全
HTTPS原理
HTTPS 通过加密、数字证书、握手过程等多种手段,确保了网络通信的安全和可靠。它为用户提供了更高级别的隐私保护和数据安全,是现代互联网中重要的安全保障机制。随着网络安全威胁的不断增加,HTTPS 的应用也越来越广泛,成为保障网络安全的重要基石。
131 70
|
20天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
6天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
18天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
21天前
|
监控 Java API
探索Java NIO:究竟在哪些领域能大显身手?揭秘原理、应用场景与官方示例代码
Java NIO(New IO)自Java SE 1.4引入,提供比传统IO更高效、灵活的操作,支持非阻塞IO和选择器特性,适用于高并发、高吞吐量场景。NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),能实现多路复用和异步操作。其应用场景涵盖网络通信、文件操作、进程间通信及数据库操作等。NIO的优势在于提高并发性和性能,简化编程;但学习成本较高,且与传统IO存在不兼容性。尽管如此,NIO在构建高性能框架如Netty、Mina和Jetty中仍广泛应用。
30 3
|
21天前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
55 2
|
21天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
83 1
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?