你是否了解HTTPS的加密原理?(面试常问)

        梦梦前段时间面试,以及工作之后负责的模块多多少少都会涉及到一些网络协议的知识,今天就抽出时间整理了其中两个常见的协议:HTTP和HTTPS的区别。

什么是网络协议?

        网络协议:是计算机网络中为了进行数据交换而指定的规则,收发双发必须采用同一套协议才能进行传输。也是规定了信息传输时必须采用的格式和这些格式代表的意义。
在这里插入图片描述

HTTP和HTTPS的基本概念

        HTTP:超文本传输协议,是互联网上最广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从www服务器传输超文本到本地浏览器的传输协议。http传输超文本信息时是明文的,信息是不安全的,如果传输过程中黑客拦截了浏览器和服务器之间的传输报文,就可以直接获取其中的信息了。所以在支付之类的应用中,是不用http协议传输的。
        HTTPS:以安全为目标的http通道,简单来说,就是http协议的升级版、安全版,即在http协议下加入了SSL协议,所以HTTPS的安全基础就是SSL,因此加密的详细内容就需要SSL。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

HTTP和HTTPS的区别

        1,http协议是超文本传输,即明文传送的,传输的信息是未加密的;而https是在http的基础上加了ssl协议做安全性的。
        2,https协议需要到ca申请证书,一般免费的证书比较少,因而需要一定的费用。
        3, http和https使用的是不同的连接方式,端口号也不一样,前者是80,后者是443.
        4,http的连接很简单,无状态的;而https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS的优缺点

优点

        1,使用https协议可以认证用户和服务器,确保数据正确发送到客户机和服务器。
        2,https是由ssl+http构建的可以进行加密传输、身份认证的网络协议,比http协议安全,可以防止数据在传输过程中不被盗取、修改等等,保证数据的完整性、安全性。
        3,https是现行架构下最安全的解决方案,虽然不是绝对的安全,但是它增加了中间人攻击的成本。

缺点

        1,https协议握手比较费时,会使页面的加载时间延长。
        2,https的连接缓存不如http高效,增加数据的开销,甚至已有的安全措施也会因此而受到影响。
        3,ssl证书需要绑定ip,不能在同一个ip上绑定多个域名,IPv4资源不可能支撑这个消耗。

HTTPS的工作原理

        首先,先了解几个概念:
        HTTP:直接通过明文在浏览器和服务器之间传递消息,消息相当于“裸奔”在互联网中,是相当不安全的。
        HTTPS:在HTTP的基础上增加了一个SSL协议,采用的是对称密钥加密(共享密钥加密)和非对称密钥加密(公开密钥加密)来保护浏览器和服务器之间的通信安全。
在这里插入图片描述
        可以看到https在应用层和传输层之间加了SSL层,该层就是保证应用数据的加密层。具体怎么保证安全的,还需要继续往下看。
        对称密钥加密:加密和解密用的是同一个密钥,也叫共享密钥加密,加密的时候必须将共享密钥明文传送给对方,如果此时攻击者拦截了共享密钥,那么使用共享密钥加密过的消息也就不安全了。
在这里插入图片描述

        非对称加密(公开密钥加密):也叫公开密钥加密,是成对的出现的,分为公钥(随意发布的,任何人都可以获取)和私钥(只能由自己知道),公钥加密之后的内容必须通过私钥进行解密。服务端把公钥发送到客户端,客户端用服务端的公钥生成密文,然后把密文发送出去,接收方使用自己的密钥进行解密,这种加密方式,不需要把密钥暴露在互联网中,相对来说是安全的。
        但是这种方式,也会出现一种情况,倒是传输的数据是不安全的,即:公钥在传输的过程中被攻击者拦截了,给客户端发送了一个攻击者自己的假的公钥,然后客户端不知道这是来自攻击者的公钥,就用这个假公钥对数据进行了加密,然后把加密后的数据发送给攻击者,攻击者用自己的私钥解密了数据,这样对数据也是不安全的,所以还是需要解决的。
在这里插入图片描述

        到这里,就会引入一个第三方的机构,既然无法确定双方的身份,就和支付宝一样,用户和商家无法对货款和货物做出判断,那么就交由第三方进行监督,这里也是一样的,CA机构就是做这件事情的,在进行交换消息之前,服务器会向CA机构申请一个证书,CA证书,CA证书使用数字签名的方式加密,CA机构会审核服务器的身份后,才会颁发给服务端,CA证书具有权威性,中间的攻击者是很难伪造的,在颁发的同时还会有公钥和私钥,这时公钥就具有了权威性,中间人无法伪造,客户端在接收到公钥和证书后会首先对CA证书进行验证,如果验证通过才会继续后面的通信。
        引入了CA证书的话,非对称性加密就做到了绝对安全,但是非对称加密效率比较低,比对称加密慢很多,所以,https就使用“对称加密+非对称加密”组合的方式做加密流程的。具体如下:
        1,浏览器使用Https的URL访问服务器,建立SSL链接。
        2,服务器接收到SSL链接后,发送非对称加密的公钥A给浏览器。
        3,浏览器生成随机数,作为对称加密的密钥B(要传输的明文数据)。
        4,浏览器使用服务器返回的公钥A,对自己生成的对称加密密钥B进行加密,得到密钥C。
        5,浏览器将密钥C发送给服务器
        6,服务器使用自己的私钥D对接受的密钥C进行解密,得到对称加密密钥B。
        7,浏览器和服务器之间使用密钥B作为对称加密密钥进行通信。

        小总结:通过上面的流程浏览器和服务器之间共享一个对称加密密钥B,而且不会被人监听和拦截到,之后的消息传递,使用密钥B进行对称加密。即:通过非对称加密对对称加密(对称加密是明文的)的密钥进行加密,在约定好了密钥后,然后后续的消息传递使用对称加密,这样算下来效率会提高很多。

        重要:在第四步之前,浏览器会先判断发送来的非对称性公钥是否来自服务端,如果是,就使用此公钥对 对称性密钥B(明文数据)进行加密,生成密钥c,然后才会把密钥c发送给服务器,如果判断发来的公钥不是来自服务端,而是攻击者已经攻击了,就不会再对明文数据进行加密了。这个步骤到底怎么实现的呢?看下面的分析

        a,第二步时,服务器向浏览器发送非对称性公钥A的时候,会通过hash算法公钥服务器的个人信息生成信息摘要
在这里插入图片描述
        b,为了防止信息摘要被调换,服务器会采用CA提供的私钥进行加密来生成数字签名。也就是说,数字签名是由服务器的公钥和服务器的个人信息组成的。
在这里插入图片描述

        c,最后,会把之前没有经过hash算法之前的服务器公钥和服务器个人信息,和最后生成的数字签名 合并在一起,生成数字证书。然后才把数字证书发送给客户端。
在这里插入图片描述

        d,客户端拿到数字证书之后,采用CA 的公钥对数字证书里的数字签名进行解密(加密的时候是使用CA的私钥对信息摘要加密的),来获取信息摘要。然后再对数字证书里面的服务器个人信息、公钥进行hash算法,得到另一份信息摘要。
        e,最后客户端对两份摘要信息比对,如果一样的话,证明发送公钥者是服务器,否则的话,就是攻击者。
在这里插入图片描述

        这就看到https加密的流程确实复杂,安全性也比较高。梦梦对这部分也是一知半解的,前段时间面试的时候被问到,入职之后做支付也是https协议的,于是才去查找资料了解https的加密原理,但感觉了解的不是多么的彻底,记录了一点自己目前所能领悟的。广大csdn的小伙伴看到这篇文章之后,如果有其他的理解或者想法,欢迎在下方留下你的评论,一起讨论探讨探讨。

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦梦~~

你的鼓励是对我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值