当前位置: 首页 > news >正文

浅谈 HTTPS

文章目录

  • HTTPS 简介
  • HTTPS 特点
  • HTTPS 缺点
  • 与 HTTP 的区别
  • HTTPS 工作流程
    • 1. 服务端生成密钥对
    • 2. 服务端申请数字证书
    • 3. 服务端发送数字证书
    • 4. 客户端验证数字证书
    • 5. 客户端解析证书内容
    • 6. 客户端传送加密信息
    • 7. 服务端解密信息
    • 8. 双方协商生成会话密钥并交换
    • 9. 使用会话密钥进行通信
  • 总结

浅谈 HTTP

HTTPS 简介

HTTPS (Hypertext Transfer Protocol Secure) 是一种安全的通信协议,以安全为目标的HTTP通道,简单讲是HTTP的安全版

HTTPS 通过在 HTTP 协议的基础上添加 SSL/TLS 来提供加密通信和身份验证,HTTPS的安全基础是 SSL/TLS。

这意味着,当使用 HTTPS 访问一个网站时,与该网站之间的所有通信都是加密的,从而保护数据免受中间人攻击和其他形式的网络攻击。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

  • SSL:
    HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

  • TLS:
    它是 SSL (Secure Sockets Layer) 的继任者,因为 SSL 在过去的几个版本中存在已知的安全漏洞,所以 SSL 3.0 之后的版本被重新命名为 TLS,并且后续的改进和发展都在 TLS 的名下进行。

在这里插入图片描述

HTTPS 的作用:

  • 建立一个信息安全通道,来保证数据传输的安全;
  • 确认网站的真实性。

HTTPS 特点

  1. 安全性:

    HTTPS在HTTP协议的基础上加入了安全层(SSL/TLS),对数据进行加密传输

    保护了数据在传输过程中的安全,防止被第三方截获和窃取(Cookie都会通过加密的方式传输)

    HTTPS连接在数据传输过程中始终保持加密状态,即使连接被截断,也不会影响数据的加密状态。

  2. 可信性:

    HTTPS需要使用CA(证书颁发机构)颁发的证书来进行加密和解密操作,来验证服务端的身份

    客户端在与服务端建立连接时会验证证书的真实性和合法性,确保通信双方的身份可信(防止了中间人攻击)

    使用HTTPS协议可以提升用户对网站的信任度

  3. 完整性:

    HTTPS协议使用MAC(消息认证码)来确保数据的完整性。


HTTPS 缺点

  • 性能开销

    HTTPS协议需要在服务器和客户端之间建立加密连接,相对于HTTP协议需要进行更多的握手和加密解密操作,这可能会增加网络延迟和服务器负载。

  • 实现难度

    HTTPS协议涉及到加密算法和证书管理等复杂技术,实现难度较大,需要专业的技术支持和维护。

  • 兼容性问题

    虽然大多数现代浏览器都支持HTTPS协议,但仍有一些较旧的浏览器或设备可能无法很好地支持HTTPS协议,导致页面无法正常加载或出现安全警告。

  • 成本问题

    使用HTTPS协议需要购买SSL证书等额外的成本,对于一些小型网站或个人网站来说可能是一个负担。此外,连接服务器会占用较高的资源,增加带宽和服务器投入成本。


与 HTTP 的区别

HTTP 与 HTTPS

特性/区别HTTPHTTPS
安全性明文传输,数据可见,不安全使用SSL/TLS加密,数据安全
连接方式无加密连接加密连接,使用SSL/TLS协议
端口号默认80默认443
证书管理不需要证书需要CA颁发的SSL证书
连接状态传输过程中可能被窃取或篡改传输过程中始终保持加密状态
资源消耗较少,无需加密解密较多,需要进行加密解密操作
费用无额外费用需要购买和配置SSL证书的费用
兼容性广泛兼容可能与某些软件或设备存在兼容性问题
浏览器地址展示无安全锁标志有绿色安全锁标志
搜索引擎优化(SEO)可能排名较低(取决于搜索引擎)可能排名较高(取决于搜索引擎)

HTTPS 工作流程

1. 服务端生成密钥对

在HTTPS通信中,服务端首先生成一对密钥:私钥和公钥

  • 私钥:

    私钥是密钥对所有者(服务端)持有的,必须严格保密,不可公布给任何人。

    私钥用于解密由公钥加密的数据,以及用于对需要传输的文本的摘要进行加密,生成签名。

  • 公钥:

    公钥是密钥对持有者(服务端)公布给他人的,用于给数据加密。

    公钥加密的数据只能使用对应的私钥进行解密。

    在签名验证过程中,接收方会使用公钥对签名进行解密,获取文本的摘要,然后与自己计算得到的摘要进行对比,以验证数据的完整性和发送者的身份。

私钥可以看成钥匙,只能自己拿着,可以解开对应的锁头

公钥可以看成锁头,给别人加密重要数据的,只有对应的钥匙才能打开

.

2. 服务端申请数字证书

采用HTTPS协议的服务端必须要有一套数字证书,可以向证书颁发机构CA提出购买申请:

常见的证书颁发机构包括Symantec、GeoTrust、Thawte等。

  1. 提交申请:

    准备申请材料 => 线上购买 => 缴纳费用

    服务端向CA提交数字证书的申请(申请包括:该实体的公钥以及相关的身份信息)

  2. 验证申请:

    证书颁发机构将对服务端的申请进行审核,验证这个申请的真实性(如:确认申请者是否真的拥有所提交的公钥)

    可能还需要服务端配合完成实名认证、域名验证等环节。

  3. 颁发证书:

    验证通过后证书颁发机构将为服务端颁发CA数字证书

    证书通常以电子文件的形式提供,服务端需要根据颁发机构的指引下载、安装和使用证书。

数字证书包含:

  1. 申请者的公钥:

    用于在HTTPS通信中加密数据,确保数据只能被具有相应私钥的服务端解密

  2. 数字签名:

    证书颁发机构会使用自己的私钥对证书的内容(包括申请者的公钥和一些其他信息)进行加密,生成一个数字签名(哈希值)

    这个签名是证书颁发机构对证书内容的认可,确保证书没有被篡改

  3. 其他信息:

    申请者的身份信息(如域名)

    证书信息:包括证书的有效期、证书持有者的名称(域名)、证书链等信息

HTTPS的数字证书并不直接包含私钥,但它确实与私钥紧密相关。

.

3. 服务端发送数字证书

服务端收到数字证书后,会在HTTPS通信的TLS/SSL握手过程中主动向客户端发送数字证书

.

4. 客户端验证数字证书

  1. 获取证书链:

    客户端收到数字证书后就会从中获取证书链

    证书链:数字证书中包含整个证书链,证书链是由一系列证书构成的链条,从服务端证书开始到中间证书,直到根证书结束。
    .

  2. 解析证书链:

    客户端解析证书链中的每个证书,获取证书的各种属性(颁发者、有效期、域名等)
    .

  3. 检查证书域名:

    在解析证书链后,客户端会检查证书中的域名是否与请求的域名一致

    这是为了防止“中间人攻击(MITM)”,即攻击者拦截并篡改通信内容,或者冒充服务端与客户端进行通信,确保客户端与预期的服务端进行通信。
    .

  4. 验证证书的有效性:

    在确认域名匹配后,客户端会验证证书的有效性(是否已过期、被吊销)

    • 检查证书是否在有效期内(即证书的开始时间和结束时间)
    • 检查证书是否已被吊销(通过证书吊销列表CRL或在线证书状态协议OCSP)。
      .
  5. 验证证书链:

    接下来,客户端会验证证书链的完整性(使用公钥来验证证书的数字签名)

    客户端会按照顺序验证证书链中的每个证书,从服务端证书开始,使用颁发者的公钥来验证证书的数字签名,并重复此过程,直到到达受信任的根证书。

    如果任何一个证书的签名验证失败,那么整个证书链将被视为无效,客户端将不会信任服务端证书,从而阻止与服务端的安全通信。

    以确保证书是由受信任的证书颁发机构签发的,并且整个信任链是完整和未被篡改的。
    .

  6. 验证根证书:

    最后,客户端会验证服务端证书的合法性(客户端在预置的信任机构列表中查找根证书,找到即合法)

    • 根证书在列表中:那么客户端就会信任这个根证书,并认为整个证书链是有效的。
    • 根证书不在列表中:那么证书链将被视为无效。

.

5. 客户端解析证书内容

数字证书被验证为有效后,客户端开始解析数字证书中的内容

数字证书中包含了许多关于服务端的信息:如服务端的公钥、证书的有效期、颁发者信息等。

.

6. 客户端传送加密信息

当客户端解析数字证书后,就会向服务端传送加密信息

这个过程通常包括以下几个步骤:

  1. 生成会话密钥:

    客户端会生成一个随机的会话密钥(通常是一个对称密钥)

    这个密钥将用于后续的加密和解密操作

  2. 加密会话密钥:

    客户端使用服务端证书中的公钥对生成的会话密钥进行加密

    这就像使用一个锁(公钥)将密钥(会话密钥)锁住,只有持有相应钥匙(私钥)的人才能打开这个锁

  3. 传送加密信息:

    客户端将加密后的会话密钥(以及可能的其他加密参数或信息)通过HTTPS连接发送给服务端

    这个过程中,由于会话密钥已经被服务端的公钥加密,因此即使数据在传输过程中被截获,攻击者也无法直接获取到会话密钥的内容

.

7. 服务端解密信息

当服务端接收到客户端发送的加密信息后,服务端使用自己的私钥来解密会话密钥

这就像服务端使用自己的钥匙打开了客户端锁上的锁,从而获取到了会话密钥。

这样,双方就都拥有了相同的会话密钥,而第三方无法知道这个密钥。

.

8. 双方协商生成会话密钥并交换

上面的客户端传送加密信息服务端解密信息就是 双方协商生成会话密钥并交换 的过程

.

9. 使用会话密钥进行通信

一旦会话密钥被成功协商和交换,服务端和客户端双方就可以使用这个会话密钥来对后续的HTTP请求和响应进行加密和解密了

具体来说,客户端会使用会话密钥来加密其发送给服务端的HTTP请求,而服务端则使用相同的会话密钥来解密这些请求。

同样地,服务端也会使用会话密钥来加密其发送给客户端的HTTP响应,而客户端则使用相同的会话密钥来解密这些响应。

这种加密方式通常被称为对称加密,因为它使用同一个密钥(会话密钥)来进行加密和解密操作。确保了通信过程中数据的安全性和机密性。因为只有拥有会话密钥的双方才能对消息进行正确的加密和解密,而第三方无法知道这个密钥,因此无法窃取或篡改通信内容。


总结

  1. 服务端首先生成一对密钥:私钥和公钥

  2. 服务端向证书颁发机构提交数字证书的申请(申请包括:该实体的公钥以及相关的身份信息)

  3. 证书颁发机构验证申请的真实性(如:确认申请者是否真的拥有所提交的公钥)

  4. 验证通过后证书颁发机构将为服务端颁发CA数字证书

  5. 服务端主动向客户端发送数字证书

  6. 客户端收到数字证书后就会从中获取证书链

  7. 客户端解析证书链中的每个证书,获取证书的各种属性(颁发者、有效期、域名等)

  8. 客户端检查证书中的域名是否与请求的域名一致

  9. 客户端验证证书的有效性(是否已过期、被吊销)

  10. 客户端验证证书链的完整性(使用公钥来验证证书的数字签名)

  11. 客户端验证服务器证书的合法性(在预置的信任机构列表中查找根证书,找到即合法)

  12. 客户端解析数字证书中的内容(得到服务器的公钥、证书的有效期等)

  13. 客户端会生成一个随机的会话密钥

  14. 客户端使用服务器证书中的公钥对生成的会话密钥进行加密

  15. 客户端将加密后的会话密钥发送给服务器

  16. 服务端使用自己的私钥来解密会话密钥

  17. 服务端和客户端双方协商生产会话密钥并交换

  18. 服务端和客户端双方就可以使用这个会话密钥来对后续的HTTP请求和响应进行加密和解密了

相关文章:

浅谈 HTTPS

文章目录 HTTPS 简介HTTPS 特点HTTPS 缺点与 HTTP 的区别HTTPS 工作流程1. 服务端生成密钥对2. 服务端申请数字证书3. 服务端发送数字证书4. 客户端验证数字证书5. 客户端解析证书内容6. 客户端传送加密信息7. 服务端解密信息8. 双方协商生成会话密钥并交换9. 使用会话密钥进行…...

js手动实现unshift

js 手动实现数组的unshift unshift是什么? unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。 注意: 该方法将改变数组的数目。 语法: array.unshift(item1,item2, ..., itemX)代码实现 首先,在…...

Failed to get DISPLAY: Error: All configured authentication methods failed 解决方法

Vscode一连接远程服务器就报错: 这个时候我们是无法使用Xming显示图像的。 尝试后发现,Windows电脑能够ping通服务器ip,但是服务器ping不通Windows电脑: 在网上查攻略,设置Windows电脑ip地址白名单,但…...

随便聊一下 显控科技 控制屏 通过 RS485 接口 上位机 通讯 说明

系统搭建: 1、自己研发的一个小系统(采集信号,将采集的信号数字化)通过COM口,连接显控屏 COM3 口采用 485 协议送到显控屏(显控科技)的显示屏展示出来)。 2、显控屏 将 展示的数据…...

C++学习笔记(多线程)

Multithreading 1、线程的基本操作1.1、创建线程1.2、等待线程和分离线程1.3、获取线程id 2、互斥锁3、条件变量4、例程 1、线程的基本操作 从C11开始推出关于多线程的库和函数,相比于Linux所配套的资源,C11提供的函数更加容易理解和操作,对…...

解决Redis的键值前出现类似\xAC\xED\x00\x05t\x00*这样的字符序列

文章目录 1.问题2.解决方法3.StringRedisTemplate和RedisTemplate的区别 1.问题 在使用RedisTemplate对Redis进行操作时,发现Reids键值对前有\xAC\xED\x00\x05t\x00*这样的字符序列 如图所示: 虽说不影响使用,但是听影响观感的 2.解决方法 查找了很多方法,可以指定RedisTem…...

分享 Kamailio 5.7.x 预处理一例

来自工单&#xff0c;很不错 不翻译了&#xff0c;认真看的话都能看懂 #!define IPADDR 127.0.0.1 #!defexp SIPURI "sip:" IPADDR ":5060" #!defexp QSIPURI "sip: IPADDR :5060" #!defexp V16 1<<4 Another possibility is using…...

学QT的第三天~

ikun登录界面完善 #include "mywidget.h" void MyWidget::bth1() { if(edit3 ->text()"520cxk"&&edit4 ->text()"1314520") { //1.实例化一个QmessageBox类的对象 QMessageBox box(QMessageBox::Information, //图标 "恭喜…...

数据结构---时间复杂度+空间复杂度

算法(algorithm)简单说就是解决问题的方法。方法有好坏&#xff0c;同样算法也是&#xff0c;有效率高的算法&#xff0c;也有效率低的算法。衡量算法的好坏一般从时间和空间两个维度衡量&#xff0c;也就是本文要介绍的时间复杂度和空间复杂度。有些时候&#xff0c;时间与空间…...

Verilog 触发器状态机语言描述

触发器状态机语言描述 触发器状态机语言用于描述映射到 ILA 调试核的高级触发器逻辑的复杂触发条件。触发器状态机具有下列特性 &#xff1a; • 最多 16 种状态。 • 用于复杂状态转换的单向、双向和三向条件分支。 • 4 个内置 16 位计数器 &#xff0c; 用于对事件…...

等保保护测评试题中

二、多选题 1、防火墙提供的接入模式中包括&#xff08;ABCD&#xff09; A.网关模式 B.透明模式 C.混合模式 D.旁路接入模式 2、不同设VLAN之间要进行通信&#xff0c;可以通过 .&#xff08;AB&#xff09; A.交换机 B.路由器 C.网闸 D.入侵检测 E.入侵防御系统…...

SD-Turbo部署

stabilityai/sd-turbo 官网 2023 年 11 月 30 日 继推出 SDXL-Turbo 之后&#xff0c;我们又发布了SD-Turbo。 2023 年 11 月 28 日 我们正在发布 SDXL-Turbo&#xff0c;一种闪电般快速的文本到图像模型。除了模型之外&#xff0c;我们还发布了技术报告 用法&#xff1…...

【ZZULIOJ】1095: 时间间隔(函数专题)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 从键盘输入两个时间点(24小时制&#xff09;&#xff0c;输出两个时间点之间的时间间隔&#xff0c;时间间隔用“小时:分钟:秒”表示。要求程序定义如下两个函数&#xff0c;并在main()中调用…...

Rust:文件 launch.json 有什么用?

launch.json 是 Visual Studio Code&#xff08;VSCode&#xff09;中的一个配置文件&#xff0c;主要用于配置调试器。当你在 VSCode 中进行代码调试时&#xff0c;launch.json 文件告诉调试器如何启动和配置你的程序。 具体来说&#xff0c;launch.json 文件包含了以下信息&…...

vue3实现文字垂直滚动

在Vue 3中实现文字的垂直滚动&#xff0c;你可以使用CSS动画或者JavaScript来控制滚动行为。以下是一个简单的Vue 3组件示例&#xff0c;该组件使用CSS的keyframes动画来实现文字的垂直滚动效果&#xff1a; <template> <div class"vertical-scroll-text"&…...

Android4.4真机移植过程笔记(三)

如果文章字体看得不是很清楚&#xff0c;大家可以下载pdf文档查看&#xff0c;文档已上传&#xff5e;oo&#xff5e; 7、安装加密APK 需要修改文件如下&#xff1a; 相对Android4.2改动还是蛮大的&#xff0c;有些文件连路径都变了: //Android4.2 1、frameworks/native/libs…...

PostgreSQL备份恢复与复制

前言 随着国家战略层面对信息安全关注度越来越高&#xff0c;数据库是基础软件国产化自主可控的重要方面之一。PG是世界上最流行的开源关系型数据库之一&#xff0c;并且他是类BSD开源许可&#xff0c;开源协议非常友好&#xff0c;可以随意分发、闭源和开源&#xff0c;可以用…...

spring高级篇(八)

本篇对Spring MVC 的执行流程做一个简单总结 MVC执行流程总结 当浏览器发送一个请求&#xff0c;例如http://localhost:8080/hello&#xff0c;请求到达服务器后&#xff0c;一般会进行如下操作&#xff1a; 1、首先会经过DispatcherServlet&#xff0c;默认映射路径为 /&…...

UP互助 帮助UP起号做视频 支持B站和抖音

【软件名字】&#xff1a;UP互助 【软件版本】&#xff1a;1.0 【软件大小】&#xff1a;17.5MB 【软件平台】&#xff1a;安卓 【测试机型】&#xff1a;小米9 1.随便登个邮箱&#xff0c;添加自己平台的频道&#xff0c;然后就可以帮助别人&#xff0c;添加频道后在添加…...

*求问?:为何会超时(TLE)?

D - Grid and Magnet (atcoder.jp) 错误代码&#xff1a; //2024年5月5日14:53:43 #include <bits/stdc.h> #define move mmove //防止与头文件中重复 using namespace std; int h,w; string s[1000]; const int move[4][2]{{1,0},{-1,0},{0,1},{0,-1}}; bool used[100…...

cocosstudio工程文件(.ccs)维护问题

创建cocos工程.bat在多人合作的cocos项目中&#xff0c;大家公用一个ccs文件&#xff0c;存在的问题是如果大家都提交ccs文件比较容易出现冲突&#xff0c;解决冲突麻烦要耗费时间&#xff0c;不提交的话就拉不到其他人更新的csd文件。 方案一 解决冲突&#xff0c;更新提交c…...

Blender动画与云渲染:创造高质量作品的未来路径

Blender作为开源的3D图形软件&#xff0c;在多个领域广受欢迎。但随着项目复杂度提升&#xff0c;传统渲染方式受限。云渲染技术的兴起突破了这些限制&#xff0c;为创作者提供了更自由、高效的创作环境。 一、Blender动画项目的挑战 传统上&#xff0c;Blender动画渲染需要依…...

【MySQL】3.MySQL核心概念解析:数据完整性、事务处理、索引及聚簇索引与非聚簇索引

探索MySQL的内部机制&#xff0c;理解数据完整性、事务处理、索引策略以及聚簇索引与非聚簇索引的区别是至关重要的。这些概念构成了数据库设计和优化的基础&#xff0c;对于确保数据的准确性、提高查询效率、维护数据的一致性和实现复杂的数据库操作至关重要。本文将逐一剖析这…...

【netty系列-03】深入理解NIO的基本原理和底层实现(详解)

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…...

大数据Scala教程从入门到精通第二篇:Scala入门

一&#xff1a;Scala入门 1&#xff1a;为什么学习Scala Spark新一代内存级大数据计算框架&#xff0c;是大数据的重要内容 Spark就是使用Scala编写的。因此为了更好的学习Spark,需要掌握Scala这门语言 Spark的兴起&#xff0c;带动Scala语言的发展! 2&#xff1a;Scala的发展…...

Spring Data JPA数据批量插入、批量更新真的用对了吗

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 前言 在前两篇文章已经…...

数据结构-线性表-应用题-2.2-12

1&#xff09;算法的基本设计思想&#xff1a;依次扫描数组的每一个元素&#xff0c;将第一个遇到的整数num保存到c中&#xff0c;count记为1&#xff0c;若遇到的下一个整数还是等于num,count,否则count--,当计数减到0时&#xff0c;将遇到的下一个整数保存到c中&#xff0c;计…...

目录页码右对齐快速解决

选择目录–段落–制表符&#xff0c;按图中设置即可...

分红76.39亿,分红率再创新高,成长活力无限的伊利带来丰厚回报

伊利47万股东&#xff0c;又等来了一个好消息。 4月29日&#xff0c;伊利股份发布2023年报&#xff0c;实现营业总收入1261.79亿元&#xff0c;归母净利润104.29亿元&#xff0c;双创历史新高&#xff0c;实现连续31年稳健增长。 在递交亮眼成绩单的同时&#xff0c;乳业巨头伊…...

关于行进线路。

https://map.tianditu.gov.cn/ 作者&#xff1a;Chockhugh 链接&#xff1a;https://www.zhihu.com/question/20545559/answer/494685117 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 以50km&#xff0c;几乎全是…...