https为何安全?

news2024/11/15 9:40:45

HTTPS(超文本传输安全协议)是一种用于安全通信的网络协议,它在HTTP协议的基础上通过SSL/TLS(安全套接层/传输层安全)协议来加密数据,以保护网络数据的传输安全。
[图片]

TLS/SSL 基础概念

概念源自百度百科:传输层安全性协议 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在 1994 年推出首版网页浏览器,网景导航者时,推出 HTTPS 协议,以 SSL 进行加密,这是 SSL 的起源。IETF 将 SSL 进行标准化,1999 年公布第一版 TLS 标准文件。随后又公布RFC 5246(2008年8月)与RFC 6176(2011年3月)。在浏览器、邮箱、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如 Google、Facebook 等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准
[图片]

TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性

题外:

  1. 握手期间所使用的的密钥交换和认证算法 (最常用的是 RSA [非对称加密]算法)
  2. 加密算法 (用于握手完成后的对称加密,常用的有 AES、3DES[对称加密]等)
  3. 信息摘要算法 (常用的有 SHA-256、SHA-1 和 MD5[散列函数] 等)

SSL/TLS 协议

HTTPS使用SSL/TLS协议来建立一个加密的通信通道。SSL/TLS协议的主要功能包括:

  • 身份验证:通过证书来验证服务器的身份,确保用户连接的是正确的服务器。
  • 数据加密:使用对称加密算法来加密传输的数据,保证数据的机密性。
  • 数据完整性:通过消息认证码(MAC)或数字签名来确保数据在传输过程中未被篡改。
    SSL 和 TLS 协议可以为通信双方提供识别和认证通道,从而保证通信的机密性和数据完整性。

TLS 协议是从Netscape SSL 3.0协议演变而来的,不过这两种协议并不兼容,SSL 已经逐渐被 TLS 取代,所以下文就以 TLS 指代安全层。 TLS 握手是启动 HTTPS 通信的过程,类似于 TCP 建立连接时的三次握手。 在 TLS 握手的过程中,通信双方交换消息以相互验证,相互确认,并确立它们所要使用的加密算法以及会话密钥 (用于对称加密的密钥)。可以说,TLS 握手是 HTTPS 通信的基础部分。

数字证书

数字证书是由可信的第三方机构(CA,证书颁发机构)颁发的,用于证明服务器的身份。证书中包含了:

  • 公钥:服务器的公钥,用于加密客户端发送的数据。
  • 证书持有者信息:服务器的名称和其他身份信息。
  • 证书颁发机构信息:CA的名称和其他信息。
  • 证书有效期:证书的有效时间范围。

握手过程

当用户通过浏览器访问一个HTTPS网站时,会触发SSL/TLS握手过程:

  • 客户端发起连接:浏览器向服务器发送一个“Hello”消息,包含支持的加密套件和协议版本
  • 服务器响应:服务器回复一个“Hello”消息,选择一个加密套件,并发送其数字证书
  • 证书验证:浏览器验证服务器的证书是否有效,包括证书链的完整性和证书的有效期
  • 密钥交换:使用DH(Diffie-Hellman)密钥交换算法或ECDH(椭圆曲线Diffie-Hellman)算法生成一个会话密钥
  • 加密通信:使用会话密钥对数据进行加密,然后通过安全的通道传输
    [图片]

对称加密与非对称加密

非对称加密:用于在握手阶段安全地交换密钥。服务器的公钥加密数据,只有服务器的私钥才能解密

  • 对称加密:用于加密实际传输的数据。使用会话密钥进行加密,速度快,适合大量数据的加密

安全特性

前向保密:即使服务器的私钥被泄露,也无法解密之前的通信数据

  • 完整性校验:通过消息认证码或数字签名确保数据在传输过程中未被篡改
  • 身份验证:通过证书验证服务器的身份,防止中间人攻击

https的优势

数据加密:保护用户数据不被窃听

  1. 身份验证:确保用户访问的是正确的服务器
  2. 数据完整性:确保数据在传输过程中未被篡改

https这么安全,那可以被抓包吗?

理论上,HTTPS 协议本身是安全的,不容易被“抓包”(即在传输过程中被截获和阅读)。但是,确实存在一些特定情况下可以实施抓包的方法,这些方法通常需要满足一些前提条件,并且可能伴随着安全风险
实现HTTPS抓包的几种方法:

  1. 中间人攻击(MITM):攻击者通过篡改网络配置,使目标流量经过其控制的服务器,从而实现对HTTPS流量的截获和可能的解密
  2. 安装根证书:攻击者通过让客户端安装一个由其控制的根证书,可以对通过该根证书签名的所有HTTPS流量进行解密。如果攻击者能够让客户端安装一个由他们控制的根证书,那么攻击者可以创建一个伪造的CA,并用这个伪造的CA签发一个看似合法的服务器证书。当客户端尝试连接到服务器时:
    a.伪造证书:攻击者可以拦截服务器的原始证书,并替换为伪造的证书。
    b.证书链验证:由于客户端信任攻击者的根证书,伪造的证书在验证过程中会被认为是有效的。
    c.密钥交换:客户端使用伪造证书中的公钥加密会话密钥,并发送给攻击者(MITM代理)。
    d.中间人攻击:攻击者(MITM代理)解密会话密钥,然后使用这个密钥加密自己的会话密钥发送给服务器。此时,攻击者拥有了两个会话密钥,可以解密和重新加密客户端和服务器之间的通信。
    e.流量捕获:攻击者可以捕获、查看和修改客户端和服务器之间的加密通信。
  3. 使用代理工具:网络调试和代理工具(如Fiddler、Charles或Wireshark)可以配置为MITM代理,用于截获和分析HTTPS流量,但这通常需要用户信任并安装代理服务器的证书
  4. 利用漏洞:如果客户端或服务器存在安全漏洞,攻击者可能利用这些漏洞来解密或篡改HTTPS流量
  5. 浏览器扩展或插件:恶意的浏览器扩展或插件可以捕获并分析通过浏览器传输的HTTPS流量
  6. 操作系统或网络驱动级别的工具:某些操作系统或网络驱动级别的工具能够捕获网络流量,包括加密的HTTPS流量
  7. 合作方:如果通信的一方与攻击者合作,攻击者可能获得解密密钥
    合法性和道德考量: 大多数合法的HTTPS抓包活动都是在用户知情并同意的情况下进行的,例如在开发和测试环境中。然而,未经授权的抓取和解密HTTPS流量通常被视为非法行为,因为它侵犯了通信的隐私和安全性
    工具配置示例: Wireshark和Charles等工具可以用于捕获HTTPS流量,但这通常需要用户或管理员进行特定配置,例如安装根证书或设置SSLKEYLOGFILE环境变量以记录TLS会话密钥。这些操作可以帮助开发者或网络安全专家在合法和道德的范围内分析和调试HTTPS流量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1699303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python面向对象基础与魔法方法详解

系列文章目录 Python数据类型:编程新手的必修课深入探索Python字符串:技巧、方法与实战Python 函数基础详解Python正则表达式详解:掌握文本匹配的魔法Python文件操作宝典:一步步教你玩转文件读写Python面向对象基础与魔法方法详解…

Nmap的使用教程(超详细)

一、Nmap简介 Nmap Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下&…

2024电工杯数学建模B题完整论文讲解(含每一问python代码+数据)

大家好呀,从发布赛题一直到现在,总算完成了2024电工杯数学建模B题大学生平衡膳食食谱的优化设计及评价完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 …

QGIS开发笔记(二):Windows安装版二次开发环境搭建(上):安装OSGeo4W运行依赖其Qt的基础环境Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139136356 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

牛客热题:滑动窗口的最大值

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:滑动窗口的最大值题目链接方法一…

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月26日预测第2弹

昨天的8883大底成功命中,但是由于昨天杀了对子,结果昨天开了对子,导致最终与中奖号码擦肩而过。今天继续基于8883的大底,使用尽可能少的条件进行缩号,同时,今天将准备两套方案,一套是我自己的条…

【重制版】Unity Meta Quest 一体机开发(一):前期准备,Meta XR SDK导入和环境配置,配置玩家物体

文章目录 📕教程说明📕Meta XR SDK 介绍📕前期准备⭐开启开发者模式⚡在 Meta 官网申请开发者⚡在 Meta Quest 手机 APP 开启开发者 ⭐电脑需要下载的软件⚡Meta Quest Link(以前叫做Oculus PC客户端)⚡Oculus ADB Dri…

Overleaf中出现文字越界、越下届、没有正确分页、换页的原因和解决方法

在使用overleaf中,我偶尔会遇到如标题所说的情况,也如图所示: 后来发现,是因为这一页前面是一个表格,所以怀疑是表格的格式导致的。所以让chatgpt帮我更换了表格的格式,成功解决问题。 对于问题可能的成因…

【C语言】10.C语言指针(1)

文章目录 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2.指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引⽤操作符(*)2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引⽤操作符 2.3 指针变量的⼤⼩ 3.指针变量类型的意…

docker 进入容器报错OCI runtime exec failed

今天进入docker容器的时候一直报错 OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown 执行命令 docker exec -it 容器id /bin/sh 可进入

ThreadPoolExecutor线程池使用以及源码解析

文章目录 1. 引子2. 线程池源码分析2.1. 总览2.2. Executor2.3. ExecutorService2.4. AbstractExecutorService2.5. ThreadPoolExecutor构造函数核心参数阻塞队列拒绝策略核心属性线程池状态Worker 类execute() 方法addWorker() 方法runWorker() 方法getTask() 方法processWork…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档: https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

运算符优先级详解:从一元到布尔运算的全面指南

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、一元运算符:最高优先级 三、二元运算符:紧随其后的优…

【vue】el-select选择器实现宽度自适应

选择器的宽度根据内容长度进行变化 <div class"Space_content"><el-selectv-model"value":placeholder"$t(bot.roommessage)"class"select"size"small"style"margin-right: 10px"change"selectcha…

分布式Id/框架/发号器一文介绍

文章目录 一、分布式id介绍1、什么是分布式id2、分布式id的特点 二、UUid生成算法1、JDK UUID2、Snowflake 雪花算法3、PearFlower 梨花算法4、Mist 薄雾算法 三、常见发号器服务1、数据库1&#xff09;自增2&#xff09;号段模式 2、NoSQL 四、常见框架1、百度UIDGenerator2、…

01主动安全系统

“安全”一直是车主对车辆考核的重要指标。车辆安全可以分为从主动安全和被动安全两个方面进行分类。今天就来说说汽车主动安全系统的那些事儿。 01.什么是主动安全系统&#xff1f; 主动安全是指尽量自如地操纵控制汽车的安全系统措施。无论是直线上的制动与加速还是左右打方…

粤嵌—2024/5/21—打家劫舍(✔)

代码实现&#xff1a; int rob(int *nums, int numsSize) {if (numsSize 1) {return nums[0];}if (numsSize 2) {return fmax(nums[0], nums[1]);}int dp[numsSize];dp[0] nums[0];dp[1] fmax(nums[0], nums[1]);for (int i 2; i < numsSize; i) {dp[i] fmax(dp[i - 1…

Java核心: 脚本引擎和动态编译

静态语言和动态语言的在相互吸收对方的优秀特性&#xff0c;取人之长补己之短。脚本引擎和动态编译就是其中一个关键特性&#xff0c;扩展了Java的能力边界。这一篇我们主要讲两个东西: ScriptEngine&#xff0c;执行脚本语言代码&#xff0c;如JavaScript、Groovy JavaCompile…

LeetCode:78.子集

解答 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res[[]]for i in nums:res[[i]num for num in res]return res代码解释 这段代码定义了一个名为Solution的类&#xff0c;并在其中定义了一个名为subsets的方法。该方法接受一个整数列表nums作…

TOTP 算法实现:双因素认证的基石(C/C++代码实现)

双因素认证&#xff08;Two-Factor Authentication, 2FA&#xff09;扮演着至关重要的角色。它像是一道额外的防线&#xff0c;确保即便密码被窃取&#xff0c;不法分子也难以轻易突破。在众多双因素认证技术中&#xff0c;基于时间的一次性密码&#xff08;Time-Based One-Tim…