热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

用故事说透HTTPS

故事中的主演:小华今年上大一,这是她第一次离开父母,独自一人到北京上学。今天妈妈的生日,想了想要给妈妈一个祝福,

故事中的主演:

小华今年上大一,这是她第一次离开父母,独自一人到北京上学。今天妈妈的生日,想了想要给妈妈一个祝福,便给妈妈发了条消息:

妈妈收到这条消息非常开心,女儿这么忙还能记得自己的生日,两个人便开始聊了起来。妈妈知道女儿一直省吃俭用,决定给女儿打点钱过去。

小黑是个黑客,专搞一些“偷鸡摸狗”的事情,他已经监听了这对母女的对话。一直看着她们唠家常,都快睡着了。

直到看到母女提到钱的事情,立马打起精神,决定搞一笔。然后他截获了小华的消息,替换成自己精心准备的内容给小华的妈妈发过去了。

小华的妈妈随后就把钱打给了小华,未曾想到母女二人的聊天内容尽在小黑的掌控之中。小黑拿到钱后就逃之夭夭了。


「公众号素燕注:HTTP 协议是建立在 TCP 之上的,TCP 是否安全决定了 HTTP 是否安全。HTTP的报文内容并未加密,容易被监听和篡改。小黑就监听了母女二人的聊天内容,并对内容进行了篡改,伪装成女儿进行聊天。所以 HTTP 有以下 3 个问题:

1.内容未加密,容易被监听,都是明文传输;

2.无法验证内容的完整性,容易被篡改,也就是说不知道消息是不是被修改过;

3.无法验证对方的身份,我现在聊天的人是谁,可靠吗?」


小华被骗后,心里很难过,把这件事告诉了她的计算机老师王大强。王老师听到被骗的经历,感到非常惊讶,消息为什么会被篡改呢!立马查看了她们使用的聊天软件,原来这个软件直接使用的是 TCP 协议,没有做安全措施。

研究完软件后,大强对小华说:“这款软件有问题,以后别用了,要用具有安全措施的软件,比如使用 TSL/SSL 协议的软件”。

小华说:“什么是 TSL/SSL 呢?”。大强看到小华诚恳的表情,决定把 HTTPS 的原理告诉她,但是想到她可能理解不了,然后决定剖析一下她和妈妈被骗的场景。

既然小华和她妈妈的聊天内容是明文传输的,那直接把内容加密不就完事了吗。小华和她妈妈就约定了一个密码,所有的内容都通过这个密码进行加密和解密。

「公众号素燕注:这种加密方式称为对称加密,加密解密都是通过同一个密码来操作,所以需要保证密码的安全,一旦泄露,后果很严重」

小华立马觉察到事情的不妙,密码如何才能传给她妈妈呢。只能双方见面后来约定一个密码。但是她想到远在美国的爸爸,如果向他要钱的话,需要飞往美国把密码告诉他。这太麻烦了。

王大强老师说:“别急,还有更好的方法”。那就使用两个密钥,一个用来加密(称为私钥),另一个用来解密(称为公钥),使用私钥加密过的内容,只能通过公钥进行解密。私钥只有自己有,公钥可以丢给别人。

小华和妈妈,只把公钥交给对方就行。小华给妈妈发消息的时候,用妈妈的公钥进行加密,私钥只有妈妈有,也就是说只有妈妈能解密。

「公众号素燕注:这种加密方式称为非对称加密,会有二个钥匙,一个钥匙加密过的内容只能通过另一个钥匙进行解密。至于为啥要说公钥加密私钥解密,虽然两个钥匙都可以进行加密解密,但是公钥加密私钥解密这种说法不是更好理解吗?公钥被人都知道,私钥只有自己知道」。

小华想了想觉得还是有点不安全,假如她和妈妈进行交换公钥的时候,被小黑监听了。

小华把自己的公钥 xiaohua_pub 发给妈妈,中途被小黑掉包了,小黑把自己的公钥 xiaohei_pub 发给了小华的妈妈。这样小华妈妈发消息的时候就使用了小黑的公钥进行了加密,小黑获取到消息表可以用自己的私钥进行解密。

妈妈发送自己的公钥给小华的时候也被小黑掉包了,这时小黑就有了双方的公钥。

小黑监听到小华要求妈妈打钱的消息,对消息进行了篡改。


王大强老师听完小华的疑虑,竖起了大拇指,说道:“别急,听我慢慢解释”。

现在的问题是出在交换公钥的时候被小黑调包了,那接下来就需要解决这个问题。如何才能把公钥安全地送到对方手上。

这似乎是永远解不了的问题,毕竟公钥始终是要经过传输的。这似乎是一个鸡生蛋蛋生鸡的问题。后来小华想了想他平时网上购物的时候,以前总是担心怕付款了,商家跑路不给发货,自从有了淘宝这个第三方机构,毕竟阿里家大业大,值得信赖,即使商家跑路了可以找淘宝。

后来就出现了关于公钥的认证机构,这些认证机构很少,但非常权威,它会和电脑、浏览器等厂商达成信任关系,提前把认证机构的公钥安装到系统中,这样就不会涉及到传输的问题了。

在聊天的过程中,小华发现消息发送和接收的时候很慢,后来发现因为是加密算法耗费比较长的时间。小华想了想,使用对称加密的时候,唯一的缺点是交换秘钥比较麻烦,但是速度非常快。那么可以通过非对称加密来传输对称加密的密钥,密钥传输成功后,使用对称加密来加密消息。

到此,你理解如何保证通信安全了吗?

「公众号素燕注:HTTP 属于应用层协议,HTTPS 并不是一个新的协议,它只是比 HTTP 协议多了一层(TSL/SSL)来保证数据传输安全。TSL/SSL也属于协议,它的主要作用是保证数据传输安全。大多数使用的是 OpenSSL 来实现,比如 Node 中的 TSL 就是基于 OpenSSL 实现的」。

总结

本文以故事的形式介绍了 HTTP 的不安全,保证 HTTPS 安全性的背后支持,包含数字证书、数字签名、对称加密、非对称加密的概念,当然光有理论还不行,需要实践才能更好地理解。大家加油。


推荐阅读:

第 13 天:从 HTTP 到 HTTPS,取得阶段性胜利

第 11 天:我找到了学习 socket 的正确姿势

我总结了学习前端的路线


推荐阅读
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍如何在QT框架中使用QWebSocket和QTcpSocket实现SSL加密通信,涵盖单向认证设置。单向认证常见于Web通信场景,其中客户端验证服务端证书,而服务端不验证客户端证书。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
author-avatar
村头的小路_157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有