HTTPS安全通信和SSL Pinning

随着互联网的迅速发展,网络通信安全问题日益凸显。在这一背景下,HTTPS作为一种加密通信协议得到了广泛应用,以保障用户的数据隐私和信息安全。本文将介绍HTTPS的基本原理、发展历程,以及与之相关的中间人攻击和防护方法。

1. HTTPS的基本介绍与加密解密过程

HTTPS,全称为超文本传输安全协议(Hypertext Transfer Protocol Secure),是在HTTP协议基础上添加了安全性保障的通信协议。其核心目标是通过加密通信和身份验证来确保数据在客户端和服务器之间的传输过程中不被窃取或篡改。

HTTPS的加密解密过程包括以下步骤:

在这里插入图片描述
客户端Hello:客户端向服务器发起连接请求,并提供支持的加密算法列表。
服务器Hello:服务器从客户端提供的加密算法列表中选择一个,并发送服务器证书。
证书验证:客户端验证服务器证书的合法性,包括证书是否过期、颁发者是否受信任等。
生成共享密钥:客户端利用服务器证书中的公钥加密随机生成的共享密钥,并发送给服务器。
握手完成:服务器使用私钥解密收到的共享密钥,双方完成握手,通信开始加密。
数据传输:双方使用共享密钥对数据进行加密和解密,确保传输过程中的数据机密性和完整性。

2. HTTPS的发展与改进

随着技术的进步,HTTPS在不断演进以提供更高的安全性和性能。也衍生出了各种“升级版本”
在这里插入图片描述

HTTP/2 (HTTP2)

HTTP/2(也称为HTTP2.0)是HTTP协议的新一代版本,旨在改进现有的HTTP/1.1协议的性能和效率。HTTP/1.1虽然广泛使用,但在处理现代网页和应用所需的大量资源时,其效率存在限制,如串行请求、头部重复等。HTTP/2的设计目标之一就是克服这些限制,提供更快、更高效的网络通信。

HTTP/2的主要特点包括:

多路复用(Multiplexing):HTTP/2允许在单个连接上同时发送多个请求和响应,避免了HTTP/1.1中的阻塞问题,提高了资源的利用率。
头部压缩(Header Compression):HTTP/2使用HPACK算法对头部信息进行压缩,减少了数据传输的大小,从而节省带宽。
二进制传输(Binary Protocol):HTTP/2采用二进制格式传输数据,取代了HTTP/1.1的文本格式,提高了解析效率。
服务器推送(Server Push):HTTP/2允许服务器在客户端请求之前主动向客户端推送资源,提前满足客户端的需求,加快页面加载速度。
优化连接管理:HTTP/2引入了一些机制,如流优先级、窗口控制等,以优化连接的管理和数据传输。

QUIC

QUIC(Quick UDP Internet Connections)是一种由Google开发的网络传输协议,旨在提供更快速和安全的互联网连接。QUIC基于UDP协议,相较于TCP协议,它在连接的建立和维护过程中引入了一些改进。

QUIC的主要特点包括:

连接合并:QUIC允许多个连接共享一个传输流(UDP连接),从而减少了建立和维护连接的开销。
0-RTT握手:QUIC支持0-RTT(Round-Trip Time)握手,允许客户端在第一次连接时就发送数据,减少了连接延迟。
头部压缩:QUIC也采用头部压缩,类似于HTTP/2,减小了数据传输的大小。
移动网络优化:由于QUIC对网络切换和连接丢失的处理较为灵活,它在移动网络环境下表现良好。
加密和安全:QUIC在连接建立阶段就使用加密,提供了更高的安全性,而且通过多路复用提供更快的数据传输。
需要注意的是,尽管QUIC的设计目标是提供更快速和安全的连接,但由于它是相对较新的协议,它的广泛采用和支持可能需要一些时间。

3. CA与PKI

在这里插入图片描述

CA(Certificate Authority)是证书颁发机构,负责验证服务器证书的真实性并签发数字证书。PKI(Public Key Infrastructure)是公钥基础设施,用于管理数字证书、密钥等安全元素。

4. 中间人攻击及防护

在这里插入图片描述

中间人攻击是指攻击者在通信双方之间插入自己的恶意服务器,欺骗双方以为他们正在直接通信。攻击者可以窃取信息、篡改数据甚至进行恶意操作。

如果用户或管理员安装了不受信任的CA的根证书到设备或计算机的信任存储中,那么这个CA签发的所有证书都会被信任,无论其是否合法。这样,攻击者可以签发虚假证书,让设备信任并连接到攻击者控制的服务器 —— 这通常就是中间人攻击的由来

中间人攻击的流程包括:

攻击者伪装成服务器,与客户端建立加密连接。
攻击者同时伪装成客户端,与服务器建立加密连接。
攻击者将客户端和服务器的数据进行解密并重新加密,以实现中间人的攻击目的。

防护中间人攻击的方法包括:

使用受信任的证书:确保服务器证书由可信的CA颁发。
实施证书校验:客户端验证服务器证书的合法性。
使用公钥证书:客户端使用服务器公钥进行加密,确保只有服务器可以解密数据。

5. SSL Pinning和移动应用

SSL Pinning是一种在移动应用中使用的安全机制,用于强制应用只信任特定的服务器证书或公钥,防止中间人攻击。在SSL Pinning中,应用将服务器证书或公钥固定在应用代码中,确保与特定服务器建立连接。

6. 总结

HTTPS作为一种加密通信协议,在保障网络通信安全方面发挥着重要作用。自iOS 9开始,Apple在操作系统中加强了对HTTPS的支持和推荐。虽然iOS 9并没有完全强制应用只能使用HTTPS,但它引入了"App Transport Security"(ATS)功能,该功能默认要求应用使用HTTPS进行网络通信,以提高数据的安全性。ATS要求应用在使用网络连接时使用TLS 1.2及更高版本的加密,并且要求服务器的证书必须来自受信任的证书颁发机构。

因此,在开发iOS应用时,使用HTTPS进行网络通信已经成为了一个几乎必不可少的安全实践。大家在借助HTTPS提高应用安全性的同时,也应该重视其中的一些安全问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.RTKLIB环境配置和调试

1.源码下载 下载链接:rtklib 注:2.4.2 p13为稳定版本(标识p代表稳定版本),2.4.3 b34为最新实验版本(标识b)。点击2.4.3 b34 的Source Programs and Data 链接下载源码。 2.环境配置 **集成…

深度剖析java类和对象

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 在Java中,一切皆对象。 目录 一、类的定义和使用1.1类的定义格式1.2定义学生类 二、类的实例化三、this引…

《Flink学习笔记》——第九章 多流转换

无论是基本的简单转换和聚合,还是基于窗口的计算,我们都是针对一条流上的数据进行处理的。而在实际应用中,可能需要将不同来源的数据连接合并在一起处理,也有可能需要将一条流拆分开,所以经常会有对多条流进行处理的场…

基于Jenkins构建生产CICD环境(第三篇)

目录 基于Jenkins自动打包并部署docker环境 1、安装docker-ce 2、阿里云镜像加速器 3、构建tomcat 基础镜像 4、构建一个Maven项目 基于Jenkins自动化部署PHP环境 基于rsync部署 基于Jenkins自动打包并部署docker环境 1、安装docker-ce 在192.168.2.123 机器上&#x…

SQLI-labs-第三关

目录 知识点:单括号)字符get注入 1、判断注入点: 2、判断当前表的字段数 3、判断回显位置 4、爆库名 5、爆表名 6、爆字段名,以users表为例 7、爆值 知识点:单括号)字符get注入 思路: 1、判断注入点&#xff1…

HTML学习笔记02

HTML笔记02 页面结构分析 元素名描述header标题头部区域的内容(用于页面或页面中的一块区域)footer标记脚部区域的内容(用于整个页面或页面的一块区域)sectionWeb页面中的一块独立区域article独立的文章内容aside相关内容或应用…

测试理论与方法----测试流程的第四个步骤:执行测试,提出缺陷

8、执行测试—–>提交缺陷报告 测试流程:执行测试—–>提交缺陷报告 1、缺陷的概述(回顾) 结果角度:实际结果和预期结果不一致 需求角度:所有不满足需求或超出需求的,都是缺陷 2、缺陷的相关属性…

Glide分析和总结

1. Glide概述 Glide是一款图片处理的框架,从框架设计的角度出发,最基本要实现的就是 加载图片 和 展示。 它把一个图片请求封装成一个Request对象,里面有开启、暂停、关闭、清除网络请求、以及载体生命周期的监听等操作。然后通过RequestBu…

【Java基础增强】Stream流

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得…

ELK原理和介绍

为什么用到ELK: 一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化…

CTFhub-文件上传-无验证

怎样判断一个网站是 php asp jsp 网站 首先,上传用哥斯拉生成 .php 文件 然后,用蚁剑测试连接 找到 flag_1043521020.php 文件,进去,即可发现 flag ctfhub{ee09842c786c113fb76c5542}

Android Native Code开发学习(三)对java中的对象变量进行操作

Android Native Code开发学习(三) 本教程为native code学习笔记,希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04,当然windows也是可以的,区别不大 对java中的对象变量进行操作 首先我们新建一个java的类 pub…

(二十)大数据实战——Flume数据采集的基本案例实战

前言 本节内容我们主要介绍几个Flume数据采集的基本案例,包括监控端口数据、实时监控单个追加文件、实时监控目录下多个新文件、实时监控目录下的多个追加文件等案例。完成flume数据监控的基本使用。 正文 监控端口数据 ①需求说明 - 使用 Flume 监听一个端口&am…

python爬虫14:总结

python爬虫14:总结 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好…

Ansible学习笔记6

stat模块:获取文件的状态信息,类似Linux的stat状态。 获取/etc/fstab文件的状态。 [rootlocalhost tmp]# ansible group1 -m stat -a "path/etc/fstab" 192.168.17.106 | SUCCESS > {"ansible_facts": {"discovered_inter…

Vector 动态数组(迭代器)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组&#xff08;模板语法&#xff09; 本文目标 1 熟悉迭代器设计模式&#xff1b; 2 实现数组的迭代器&#xff1b; 3 基于迭代器的容器遍历&#xff1b; 迭代器语法介绍 对迭…

在css中设计好看的阴影

在css中设计好看的阴影 在本文中&#xff0c;我们将学习如何将典型的盒子阴影转换为更好看的的阴影。 统一角度 当我们想要一个元素有阴影时&#xff0c;会添加box-shadow属性并修改其中的数字&#xff0c;直到满意为止。 问题是&#xff0c;通过像这样单独创建每个阴影&…

22-扩展

一 进程与线程;同步与异步任务;宏任务与微任务 一、进程与线程 一个程序只有一个进程,一个进程包含多个线程,单线程和多线程 二、同步与异步任务 同步任务:是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。按顺序执行,可以看做单线程,…

C++之“00000001“和“\x00\x00\x00\x01“用法区别(一百八十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

入职字节外包一个月,我离职了

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…