HTTPS的工作过程

2023-11-16

        HTTPS就是对HTTP进行了加密,因为要保证数据安全,就需要进行加密,网络中不再直接传输明文了,而是加密之后的密文,加密的方法有很多,但是整体可以分为两大类:对称加密和非对称加密

对称加密

        对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文,引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的 真实内容是啥了

        但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端 和每个密钥之间的关联关系, 这是一件很麻烦的事情

        比较理想的做法, 就是能在客户端和服务器建立连接的时候, 由客户端发送对HTTP数据进行加密的对称密钥给服务器

        但是如果直接把对称密钥明文传输, 那么黑客也就能获得对称密钥了,所以对称密钥在发送给服务器时也必须是加密传输

非对称加密

        非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥".

        公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.

        通过公钥对明文加密, 变成密文 通过私钥对密文解密, 变成明文,也可以反着用 通过私钥对明文加密, 变成密文 通过公钥对密文解密, 变成明文

使用非对称加密来传输对称密钥的流程

        1.首先由服务器生成一组公钥-私钥,服务器自己留下私钥,把公钥发送给客户端

        2.客户端收到公钥以后,用收到的公钥加密对称密钥,并把加密后的对称密钥发送给服务器

        3.服务器收到加密后的对称密钥后,用保留着的私钥进行解密,获得对称密钥的内容

        4.服务器用收到的对称密钥加密HTTP应答数据,并发送给客户端

        5.客户端收到应答数据后,用对称密钥进行解密,获得HTTP应答数据,此时客户端就知道服务器已经获得了对称密钥,客户端就用对称密钥加密业务数据发送给服务器

        6.此后,客户端和服务器用对称密钥加密数据进行通信即可,因为对称密钥只有客户端和服务器双方有,黑客就算截获到了密文,没有对称密钥也不知道内容

        由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商对称密钥的时候使用非对称加密, 后续双方都有对称密钥了就不需要非对称加密了

采用非对称加密就能保证数据安全传输了吗❓

        答案是远远不够滴,因为黑客又想到了“中间人攻击”的方式来获得对称密钥

        

        现在就让我来详细描述一下黑客是如何进行中间人攻击的

        1.首先由服务器生成一组公钥pub1-私钥pri1,服务器自己留下私钥pri1,把公钥pub1发送给客户端

        2.黑客先客户端一步截获到了服务器发送给客户端的公钥pub1,黑客自己又生成了一组公钥pub2-私钥pri2,黑客将自己生成的公钥pub2发送给客户端

        3.客户端用黑客发送过来的公钥pub2加密对称密钥,并把加密后的对称密钥发送给服务器

        4.黑客先服务器一步获取到加密后的对称密钥,由于对称密钥是用黑客发送的公钥pub2加密的,所以黑客可以用私钥pri2进行解密,获取到对称密钥的内容,然后黑客再用服务器发送的公钥pub1加密对称密钥,再把加密后的对称密钥发送给服务器

        5.服务器收到对称密钥后,由于黑客是用服务器发送过来的公钥pub1加密的,所以服务器用私钥pri1可以成功解密,获得对称密钥

        6.此时,客户端和服务器都不知道对称密钥其实已经被获取了,之后用这个对称密钥发送的业务数据都将被黑客截获,被读取到其中的内容

        看完之后是否感叹黑客的手段,但聪明的程序猿还是有办法解决

引入证书

        在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书. 这个证书包含了刚才的公钥, 也包含了网站的身份信息.

         这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证).

        这个证书可以理解成是一个结构化的字符串, 里面包含了以下信息: 证书发布机构 证书有效期 公钥 证书所有者 签名 ......

        当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的)

        通过证书客户端便能知道当前的公钥是服务器发送的还是黑客发送的,便防止了黑客进行中间人攻击

黑客有没有可能去修改证书中的公钥呢❓

        我们上面提到,证书中包含了服务器要发送给客户端的公钥,那么黑客有没有可能去修改证书中的公钥呢,这是有可能的,但是客户端能够发现证书中的公钥被修改

        客户端是如何发现证书被修改过的呢❓

        证书中有一个属性是数字签名,实际上就是一个加密后的校验和,校验和是通过证书中的内容和算法计算出来的

        当黑客修改证书中的公钥发送给客户端,客户端在收到证书后会对证书中的数字签名进行解密,获得校验和,客户端还会再根据证书中的内容计算一次校验和,比较当前计算的校验和与数字签名中的校验和是否相同,要是黑客修改过公钥的话校验和就肯定不相同,客户端就能够发现了

黑客有没有可能公钥和数字签名一起修改呢❓

        聪明的小伙伴可能想到了这个问题,我们前面提到,客户端之所以能够发现证书中的公钥被修改过,是因为数字签名解密后得到的校验和与实际计算出来的校验和不同,那黑客把公钥和数字签名都改了,让客户端计算出来的校验和与数字签名解密得到的校验和一样,该怎么办呢

        实际上黑客是可以公钥和数字签名一起修改的,但还是会被客户端发现

        因为数字签名实际上是通过CA机构私钥加密后的校验和,CA机构公钥是内置于操作系统中的,所以只要有操作系统的电脑都有CA机构公钥,能够去解密数字签名,包括黑客

        所以黑客能够解密数字签名,将证书中的公钥以及数字签名全部修改,但修改以后黑客不能将数字签名再加密回去,因为CA机构的私钥黑客是没有的,要是黑客用自己的私钥对数字签名进行加密的话,客户端用内置的CA机构的公钥就不能解密,客户端就知道了这个证书有问题,也就不会用这个证书中的公钥加密数据了

总结HTTPS的工作过程

        

        

                        我们对于HTTPS工作过程的讨论到这里就结束了,但其实黑客还是会有办法去获取到对称密钥,毕竟道高一尺魔高一丈嘛,但聪明的程序猿还是会有办法的,这里就不过多讨论了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTPS的工作过程 的相关文章

  • Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit 未触发

    我花了几个小时来解决这个问题 但毫无结果 编辑 找到解决方案 参见我的答案 项目背景 我正在构建一个项目Symfony2 这需要一个用于上传大文件的模块 我选择了Node js and Socket IO 我必须从头开始学习 所以我可能会错
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 网站(Google 和/或您)应如何处理 Accept-Language 标头?

    很长一段时间以来 我对谷歌在以下情况下的行为并不满意 并且在无意中注意到之后80 其他人 https stackoverflow com questions 1011167 what are common ui misconceptions
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • GET 和 POST 方法有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 什么时候用POST 什么时候用GET https stackoverflow com questions 46585 when do you use post and when do you use
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • AFNetworking 2.0:收到 302 到 AWS S3 时 NSURLSessionDownloadTask 被取消

    我使用 README 文件 来自 AFNetworking 2 0 页面 中的一个简单示例来下载图像 对于直接从我的网络服务器提供的图像来说 一切正常 但对于位于 S3 上的网络服务器 Web 服务器会返回 302 重定向以下错误 Erro
  • 如何使用 Netty 连接到运行 HTTP 服务器的 UNIX 域套接字?

    我正在尝试使用 Netty 连接到 Docker UNIX 域套接字 到目前为止 这是我的尝试 PostConstruct public void init throws Exception io netty bootstrap Boots
  • SSL 与 Ruby on Rails

    我需要做什么才能让我的 Ruby on Rails 应用程序获得使用 https 的流量 我安装了证书 如果我在访问网站时在地址栏中手动输入 https 则会出现小锁图标 但只需在浏览器中手动访问 www example app com 即
  • 在 HTML 表单中使用 PUT 方法

    我可以在 HTML 表单中使用 PUT 方法将数据从表单发送到服务器吗 根据HTML标准 https www w3 org TR html5 sec forms html element attrdef form method 你可以not
  • 错误:未指定默认引擎且未提供扩展名

    我正在使用 node js 和引擎设置 http 服务器 但是 我不断遇到一些问题 我对如何解决这个问题知之甚少 我希望能得到一些帮助来解决这个问题 Error No default engine was specified and no
  • HTTPS:Laravel 使用 .htaccess (public/)

    我试图在我的 Laravel 项目中包含 https 而不使用 godaddy 仅使用htaccess没什么大不了的 因为我正在使用proxypass来自我的 SSL 认证网站 该网站将传递到我的 laravel 项目 我只需要把我的 la
  • 什么会导致 TCP/IP 丢弃数据包而不丢弃连接?

    我有一个基于 Web 的应用程序和一个客户端 都是用 Java 编写的 无论如何 客户端和服务器都在 Windows 上 客户端通过以下方式发出 HTTP GET Apache HttpClient http hc apache org h
  • http:多余的response.WriteHeader调用

    我有一个HandleFunc 如果成功的话 我希望 显然 能够 sent a 200回复 在回复中写一条信息性消息 但是以下代码片段 在快乐路径中执行 if fullRun w Write byte successMsg w WriteHe
  • Safari 不会通过 http/2 加载某些资源

    服务器上启用了 Http 2 昨天我注意到在 Iphone IOS 10 2 上未加载某些资源并出现错误 failed to load resource connecting to server is not possible 当我将 Ip
  • Blackberry 上的套接字连接比 http 更快吗?

    我正在为 Blackberry 编写一个应用程序 该应用程序最初是在标准 J2ME 中实现的 网络连接是使用完成的Connector open socket 80 代替http 现在 我已经使用这两种方法实现了连接 似乎有时 套接字方法响应
  • 客户端和服务器之间的安全连接

    我正在开发一个服务器组件 它将为嵌入式客户端的请求提供服务 这也在我的控制之下 现在一切都是测试版 安全性是这样的 客户端通过 https 发送用户名 密码 服务器返回访问令牌 客户端使用自定义标头中的访问令牌通过 http 发出进一步请求
  • 如何强制 Angular Universal 从外部 api 预渲染内容?

    我想使用 SSR 来改进我的 Angular 单页应用程序的搜索引擎优化 我已经使用 Angular Universal 启用了 SSR 它致力于提供静态 html 但我的组件严重依赖异步 api 调用来构建页面上的内容 请参阅下面的示例
  • 检查发送到网页的请求数

    我正在编写一个 Java 多线程应用程序 它可以访问不同 Web 服务器的数百万个 有时甚至数十亿个 URL 这个想法是检查这些 URL 是否给出有效的 200OK 响应或 404 其他代码 我如何知道我的程序是否不会在他们的服务器上造成高

随机推荐

  • java IO、NIO、AIO详解

    目录 概述 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 synchronous asynchronous 同步是一种
  • PE文件资源解析(四)光标资源的解析

    光标资源 在这里指的是资源类型为RT CURSOR的资源信息 通过ResHacker看到的效果图如下 解析代码如下 HRSRC hResrc FindResourceEx HMODULE hModule lpType lpName wLan
  • 将数组中的元素拼接为一个字符串

    join 方法 利用JS数组的join 方法即可完成将元素拼接为一个字符串 arrayObject join separator 备注 join 方法不给定分隔符的时候 默认以英文逗号作为分隔符 toString 方法 可以使用JS数组的t
  • 如何破解PDF文件密码(在线破解PDF密码)

    如何破解PDF文件密码 在线破解PDF密码 fcwgw 5d6d com 整理 凌空飞度社区 每当毕业临近的时候 毕业生都会忙着写论文 每逢此时 Adobe Reader就是最忙的了 但是有时候遇到一些加密的PDF文档 Adobe Read
  • Jenkins与git结合使用进行C++代码静态检查

    Jenkins与git结合使用进行C 代码静态检查 在软件开发过程中 静态代码检查是一种常见的工具和实践 可以帮助开发人员在编码阶段尽早发现和解决潜在的问题 本文将介绍如何使用Jenkins和git集成 利用cppcheck进行C 代码的静
  • 建站系列(一)--- 网站基本常识

    目录 相关系列文章 前言 一 因特网 二 网站 三 服务器 四 IP 五 域名 六 DNS 七 Hosts文件 八 端口号 九 URL 十 静态网站 十一 动态网站 相关系列文章 建站系列 一 网站基本常识 建站系列 二 域名 IP地址 U
  • Python 使用requests发送get请求

    get请求是常用的请求之一 相对于post请求简单些 对于传参数的get请求有的还是有难度的 和post请求一样 必须知道每个字段的含义 这样拿到的响应才是正确的 也是我们想要的 不带参数的get请求 import requests hea
  • 自学Android之路---笔记

    1 查看类的源码CTRL b 2 所有的活动即activity必须要在AndroidManifest xml中进行注册才能生效 3 布局多练习
  • 2023华为OD机试真题【缓存需要最少金币数/贪心算法】

    题目描述 静态扫描可以快速识别源代码的缺陷 静态扫描的结果以扫描报告作为输出 1 文件扫描的成本和文件大小相关 如果文件大小为N 则扫描成本为N个金币 2 扫描报告的缓存成本和文件大小无关 每缓存一个报告需要M个金币 3 扫描报告缓存后 后
  • JWT和token的区别

    什么是token token的意思是 令牌 是服务端生成的一串字符串 作为客户端进行请求的一个标识 当用户第一次登录后 服务器生成一个token并将此token返回给客户端 以后客户端只需带上这个token前来请求数据即可 无需再次带上用户
  • Mini-NDN 安装

    1 git clone https github com named data mini ndn 2 install sh 报错1 Traceback most recent call last File usr lib python3 d
  • Spring--IOC容器

    文章目录 Spring IOC容器 一 IOC概念和底层原理 1 官方概念 2 什么是IOC 3 IOC底层原理 4 降低耦合的历史演变 二 IOC接口 Beanfactory 1 IOC思想基于IOC容器完成 IOC容器底层就是对象工厂
  • java判断是否为序列二叉树 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天还是二叉树诶嘿嘿 首先还是明确一个概念 何为序列二叉树 答 中序遍历之后序列递增的二叉树为序列二叉树 比如这棵树 4 2 7 1 3 5 8 6 它的中序遍历结果
  • 图的深度遍历

    题目描述 请定一个无向图 顶点编号从0到n 1 用深度优先搜索 DFS 遍历并输出 遍历时 先遍历节点编号小的 输入 输入第一行为整数n 0 lt n lt 100 表示数据的组数 对于每组数据 第一行是两个整数k m 0 k 100 0
  • web前端开发自学书籍推荐这5本

    JavaScript权威指南 第6版 淘宝前端团队翻译的 看译者列表都是一堆大神 这本书又叫犀牛书 号称 Javascript 开发者的圣经 网上对此书评价很多 大概意思都是说这本书是一本 JavaScript 文档手册 没有完整看过一遍此
  • IMAP,POP3,SMTP协议

    1 IMAP 因特网报文存取协议IMAP Internet Message Access Protocol IMAP协议是由斯坦福大学的Mark Crispin教授在1986年开发的 后期版本是华盛顿州立大学进行开发的 IMAP4是TCP
  • spring-boot-starter-web(Web启动器)

    Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架 其本身就是 Spring 框架的一部分 可以与 Spring 无缝集成 性能方面具有先天的优越性 是当今业界最主流的 Web 开发框架之一
  • ZYNQ FreeRTOS使用双网口笔记与爬坑

    正点原子领航者7020的开发板上有两个网口 想着用起来 上面一个是PS网口 一个是外挂在PL网口 使用vitis版本为2019 2 PL网口通过emio挂载在网络控制器1上 PS网口挂载在网络控制器0上 配置串口0 踩坑1 在vivado里
  • orCAD下设置不同的GND网络

    对 PCB设计 而言 其中最重要 也是最基础的 就是 电源与地GND 列举例子如下 i 首先 对 简单电路 而言 其中的 电源与地GND 只有2个 大部分情况下 其被命名为 VCC 和 GND ii 其次 对 稍复杂电路 而言 其必须对GN
  • HTTPS的工作过程

    HTTPS就是对HTTP进行了加密 因为要保证数据安全 就需要进行加密 网络中不再直接传输明文了 而是加密之后的密文 加密的方法有很多 但是整体可以分为两大类 对称加密和非对称加密 对称加密 对称加密其实就是通过同一个 密钥 把明文加密成密