使用TLS/SSL Pinning保护安卓应用程序

使用TLS/SSL Pinning保护安卓应用程序

在现代术语中,“SSL”(安全套接层)通常指的是“TLS”(传输层安全)。虽然 SSL 和 TLS 不是同一个东西,但 TLS 是 SSL 的改进和更安全的版本,并且在实践中已大部分取代了 SSL。

简介

SSL/TLS:互联网安全的动态二人组!🔒💻 这些是建立安全通信渠道的加密协议,确保在线交换过程中的数据隐私、完整性和认证。SSL率先出击,但TLS就像超级英雄一样赶来,解决了混乱,拯救了一天!🦸‍♂️ 现在,它们携手合作,保护我们的数据免受邪恶黑客的侵害!🔒😎

在互联网安全领域,现代技术斗篷下的是 TLS,让 SSL 在怀旧的尘埃中留下了身影!🚀 所以下次当你浏览网页时,记住,是 TLS 像老板一样守护你的秘密!🤫🔐

以下是 SSL 和 TLS 发布的完整历史:

SSL 1.0 —— 因安全问题从未公开发布。
SSL 2.0 —— 1995 年发布。2011 年弃用。有已知的安全问题。
SSL 3.0 —— 1996 年发布。2015 年弃用。有已知的安全问题。
TLS 1.0 —— 1999 年作为 SSL 3.0 的升级版本发布。计划于 2020 年弃用。
TLS 1.1 —— 2006 年发布。计划于 2020 年弃用。
TLS 1.2 —— 2008 年发布。
TLS 1.3 —— 2018 年发布。
实现 SSL/TLS 的网站在其 URL 中使用HTTPS而不是HTTP

HTTPS(超文本传输安全协议)是 HTTP 和 SSL/TLS 协议的结合体。它加密了客户端(在我们的例子中是安卓应用程序)和服务器之间传输的数据,防止未经授权的访问和篡改。HTTPS 协议在 URL 中以https://表示,对于安全的网络通信至关重要。

理解 SSL Pinning

SSL pinning 就像给你应用程序的派对制定一个可信的来宾名单。SSL pinning 不仅依赖证书颁发机构(CA)来验证 SSL/TLS 证书,还包括在你的应用程序中硬编码或“固定”信任服务器的公钥或证书。这样,应用程序确保仅连接到指定的服务器,大大降低了中间人攻击和未经授权访问的风险。

SSL Pinning 的重要性

  • 防范中间人攻击:没有 SSL pinning 的话,攻击者可以拦截你的应用程序和服务器之间的通信,冒充中间人(MITM)。他们可以向你的应用程序提供自己的 SSL 证书,从而破坏数据安全。SSL pinning 可以通过确保只有预定义的证书受信任来防止这种情况。
  • 抵抗 CA 受损:在传统的 CA 验证过程中,如果受信任的 CA 的私钥被破坏,攻击者可以发布你的应用程序无意中信任的伪造证书。SSL pinning 消除了这个风险,因为你的应用程序不完全依赖 CA。
  • 增强数据隐私:SSL pinning 通过降低对敏感信息的未经授权访问的机会来加强数据隐私。

开始使用安卓网络配置

安卓网络配置允许开发者使用 XML 文件为其应用程序定义网络安全策略。可以将其看作是为一场盛大表演布景!我们将在安卓项目的 res/xml 目录中创建一个名为 network_security_config.xml 的文件。

定义受信任的域和固定值

让我们首先在 network_security_config.xml 中定义我们受信任的域及其相应的公钥固定值:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><domain-config><domain includeSubdomains="true">example.com</domain><pin-set><!-- 用于 example.com 的 SSL/TLS 证书的固定值 --><pin digest="SHA-256">ReplaceWithYourPin</pin><!-- 用于 example.com 的 SSL/TLS 证书的备用固定值 --><pin digest="SHA-256">ReplaceWithYourPin</pin></pin-set></domain-config>
</network-security-config>

固定值是 X.509 SubjectPublicKeyInfo(SPKI)base64 编码摘要。将 ReplaceWithYourPin 替换为受信任域(例如 example.com)的公钥或证书的实际 SHA-256 哈希的 base64 编码。您可以通过检查服务器的 SSL/TLS 证书或使用此 ssllabs 网站获取这些固定值。不知道如何获取?请查看下面的博客。

🔍🔒 查看此博客以揭示您的 🔒SHA-256 哈希和 Base64 编码的固定值!🚀💻 —— 使用 SSL Labs 揭示 SHA-256 指纹 —— SSL Pinning

应用网络配置

接下来,我们需要告诉我们的应用程序使用这个网络配置。打开 AndroidManifest.xml 文件,并向 <application> 元素添加以下属性:

<applicationandroid:networkSecurityConfig="@xml/network_security_config"...>...
</application>

这样配置你的应用程序来使用指定的网络安全配置。

现在,让我们把我们的配置测试一下!🕵️‍♂️🔍
使用 URL 进行 HTTPS 连接 💻🔒

配置好网络后,现在是时候释放 HttpsURLConnection 类的力量了!🔥 这位精通技术的英雄是我们进行安全的 HTTPS 连接的关键。

try {// 为目标服务器创建一个 URL 对象val mURL = URL("https://example.com/api/data")with(mURL.openConnection() as HttpsURLConnection) {requestMethod = "GET"// 在这里添加任何必要的头部println("URL: ${this.url}")println("Response Code: ${this.responseCode}")// 执行实际的连接并处理响应val responseCode = responseCodeif (responseCode == HttpsURLConnection.HTTP_OK) {// 万岁!连接成功 - 是时候庆祝了!🎉🎉🎉// 现在,让我们处理响应,展示我们的数据处理技能!🤓📊} else {// 哎呀!优雅地处理其他响应代码(例如,错误情况)😅// 每个超级英雄都会面临挑战 - 如何处理才是最重要的!}}
} catch (e: Throwable) {// 哦哦!无效的 SSL pinning 或其他网络错误 - 但别害怕,我们已经准备就绪!💪🛡️// 是时候排除故障并用正确的错误处理拯救这一天了!println(e)
}

有了我们的 SSL pinningHttpsURLConnection,我们可以自信地驾驭数字海洋,知道我们用户的数据是安全的。所以,放心地进行安全的 HTTPS 连接测试吧!💪💻🔒

记住,安全是一场不断发展的冒险,幽默使旅程更加愉快。在 Kotlin 中进行愉快的测试和安全编码吧!🚀🔐😄"

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

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

相关文章

51.网游逆向分析与插件开发-游戏反调试功能的实现-设置主线程为隐藏调试破坏调试通道

前置内容&#xff1a; 50.网游逆向分析与插件开发-游戏反调试功能的实现-TP、NP等反调试驱动的原理-CSDN博客 码云地址&#xff08;master分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;87e45c4acc2e842f147ce0e037731f…

在k8s中将gitlab-runner的运行pod调度到指定节点

本篇和前面的 基于helm的方式在k8s集群中部署gitlab 具有很强的关联性&#xff0c;因此如果有不明白的地方可以查看往期分享&#xff1a; 基于helm的方式在k8s集群中部署gitlab - 部署基于helm的方式在k8s集群中部署gitlab - 备份恢复基于helm的方式在k8s集群中部署gitlab - 升…

Copilot概述:AI助手引领编程新纪元

前言&#xff1a; 随着人工智能&#xff08;AI&#xff09;技术的不断进步&#xff0c;编程领域也在逐渐迎来一场革命。GitHub Copilot&#xff0c;作为一款由 OpenAI 和 GitHub 合作开发的编程助手&#xff0c;引发了广泛的关注和讨论。本篇博客将全面概述 Copilot 的背景、功…

基于gradio快速部署自己的深度学习模型(目标检测、图像分类、语义分割模型)

gradio是一款基于python的算法快速部署工具&#xff0c;本博文主要介绍使用gradio部署目标检测、图像分类、语义分割模型的部署。相比于flask&#xff0c;使用gradio不需要自己构造前端代码&#xff0c;只需要将后端接口写好即可。此外&#xff0c;基于gradio实现的项目&#x…

算法分析的

&#xff08;1&#xff09;一个顾客买了价值x元的商品&#xff08;不考虑角、分&#xff09;&#xff0c;并将y元的钱交给售货员&#xff1a;编写代码&#xff1a;在各种币值的钱都很充分的情况下&#xff0c;使售货员能用张数最少的钱币找给顾客 #include<stdio.h> int…

舒心减压,益路同行,黄埔区惠民社会服务中心开展残障人士冬至漫游活动

“走出家门&#xff0c;共享阳光”残障人士游读广州项目是由广州市慈善会、广州市善城社区公益基金会资助、广州市黄埔区惠民社会服务中心实施的第四届“创善*微创投”广州市社区公益微创投项目&#xff0c;黄埔区康园工疗站约120名残障人士为服务对象&#xff0c;通过游玩与教…

leetcode 371. 两整数之和(优质解法)

链接&#xff1a;371. 两整数之和 代码&#xff1a; class Solution {public int getSum(int a, int b) {while(b!0){int numa^b; //无进位值int bit(a&b)<<1; //进位anum;bbit;}return a;} } 题解&#xff1a; 要计算两个数相加并且不能使用 - 号&#xff0…

【代码混淆】react-native 代码混淆

​ 混淆是指对源代码进行加密、重命名等操作&#xff0c;以增加代码的复杂度&#xff0c;使其难以理解和反编译。 在React Native中&#xff0c;混淆可以通过以下步骤实现&#xff1a; 将JavaScript源代码转换为基于本机平台的二进制代码&#xff0c;可以使用工具如Metro Bun…

【ARM 嵌入式 编译系列 10.4 -- 生成二进制文件】

文章目录 二进制文件生成dd 命令copy文件使用16进制对二进制文件显示 二进制文件生成 在嵌入的工作中&#xff0c;经常会使用到二进制文件&#xff0c;那么我们如何自己生成一个二进制文件呢&#xff1f;接下来介绍如何将一个只包含将32位数据的文件转化为二进制文件&#xff…

人工智能顶会CVPR2022《革新AI预训练:探索KDEP及其在知识蒸馏中的破局之道》论文解读

这里写目录标题 1.引言KDEP的核心概念&#xff1a;与传统知识蒸馏的区别&#xff1a; 2.KDEP方法KDEP的基本设置&#xff1a;KDEP的目标&#xff1a;非参数方法在特征尺寸对齐中的作用非参数对齐的工作原理&#xff1a;**SVD的工作原理**&#xff1a;PTS的基本思想&#xff1a;…

如何在 TypeScript 中遍历 Enum 的两种方案

背景 TypeScript 中有一个 JavaScript 中没有的声明关键字&#xff0c;即 enum ,在 TypeScript 项目开发过程中&#xff0c;我发现使用枚举enum的概率是极高的。枚举是一种特殊的数据类型&#xff0c;它允许开发者定义一个静态变量集合。枚举类型帮助开发者清晰的预设集合中的…

HarmonyOS4.0系统性深入开发04UIAbility组件详解(下)

UIAbility组件间交互&#xff08;设备内&#xff09; UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启…

DBeaver Community(社区版)下载及安装自用版

DBeaver Community&#xff08;社区版&#xff09;下载及安装自用版 数据库管理工具好用的都收费&#xff0c;收费的都好用。 DBeaver Community&#xff08;社区版&#xff09;免费&#xff0c;功能够用&#xff0c;性能可以&#xff0c;推荐。商业版的强大&#xff0c;收费&a…

网络知识点之-MPLS VPN

随着网络经济的发展&#xff0c;企业对于自身网络的建设提出了越来越高的要求&#xff0c;主要表现在网络的灵活性、经济性、扩展性等方面。在这样的背景下&#xff0c;VPN以其独有的优势赢得了越来越多企业的青睐。利用公共网络来构建的私有专用网络称为虚拟私有网络&#xff…

leetcode 面试题 17.19. 消失的两个数字 (hard)(优质解法)

链接&#xff1a;面试题 17.19. 消失的两个数字 代码&#xff1a; class Solution {public int[] missingTwo(int[] nums) {int lengthnums.length;int tmp0;//将完整数据以及 nums 中的数据都进行异或&#xff0c;得到的就是缺失的两个数字 a^b 的结果for(int i1;i<length…

vue3项目 - 使用 pnpm 包管理器来创建项目

创建项目 npm install -g pnpm pnpm create vue 输入项目名称、包名称、选择要安装的依赖&#xff0c;最后 pnpm install pnpm format #规范格式 pnpm dev #启动项目

jQuery的事件-动画-AJAX和插件

一、jQuery事件处理 1.认识事件&#xff08;Event&#xff09; Web页面经常需要和用户之间进行交互&#xff0c;而交互的过程中我们可能想要捕捉这个交互的过程&#xff1a; 比如用户点击了某个按钮、用户在输入框里面输入了某个文本、用户鼠标经过了某个位置&#xff1b;浏…

使用vite创建vue3项目

1、使用管理员身份打开命令行窗口&#xff0c;输入命令: npm create vuelatest TypeScript语法选择是&#xff0c;其他依次选择否&#xff0c;创建完毕。 2、 创建完毕后打开项目&#xff0c;vscode会提示安装开发相关的插件&#xff0c;选择install 3、打开vscode终端&#x…

【力扣】199.二叉树的右视图

看到这个题目的一瞬间&#xff0c;我想递归&#xff0c;必须用递归。最近被递归折磨的有点狠&#xff0c;但是我感觉我快要打败它了&#xff0c;就是现在稍稍有点处于劣势。不过没关系&#xff0c;来日方长不是。 法一&#xff1a;递归 题解&#xff1a; 之前想的就是先递归&…

2024哪款洗地机最值得入手?热门洗地机推荐

近年来&#xff0c;洗地机的被大家熟悉&#xff0c;越来越多的家庭购置洗地机来清洁家里的卫生&#xff0c;集吸、拖、洗为一体的三重清洁方式&#xff0c;为经常打扫卫生的宝妈脱离了做家务的困境&#xff0c;不用再经历繁琐的清洁步骤(扫地→拖地→拖干)&#xff0c;一拖一拉…