使用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> 元素添加以下属性:

<application
   android: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 = responseCode
        if (responseCode == HttpsURLConnection.HTTP_OK) {
            // 万岁!连接成功 - 是时候庆祝了!🎉🎉🎉
            // 现在,让我们处理响应,展示我们的数据处理技能!🤓📊
        } else {
            // 哎呀!优雅地处理其他响应代码(例如,错误情况)😅
            // 每个超级英雄都会面临挑战 - 如何处理才是最重要的!
        }
    }
} catch (e: Throwable) {
    // 哦哦!无效的 SSL pinning 或其他网络错误 - 但别害怕,我们已经准备就绪!💪🛡️
    // 是时候排除故障并用正确的错误处理拯救这一天了!
    println(e)
}

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

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

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

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

相关文章

git命令和docker命令

1、git git是分布式的版本控制工具 git可以通过本地仓库管理文件的历史版本记录 # 本地仓库操作的命令 # 初始化本地库 git init # 添加文件到暂存区 git add . git checkout 暂存区要撤销的文件名称 # 提交暂存区文件 git commit -m 注释# 版本穿梭 # 查看提交记录 git log…

SOLIDWORKS Plastics基础功能详解(二)

浇口顾问 浇口顾问可迭代确定填充型腔所需的最佳注塑位置数量&#xff08;最多 10 个&#xff09;。 位置数量的默认值为自动&#xff0c;这将激活用于查找最佳注塑位置数量的迭代方法。要指定注塑位置的自定义数量&#xff0c;请选择用户定义。 具有压力相关粘度的材料 填充和…

走向边缘智能,美格智能携手阿加犀成功在高算力AI模组上运行一系列大语言模型

近日&#xff0c;美格智能发挥软硬件一体协同开发能力&#xff0c;融合阿加犀卓越的AI优化部署技术&#xff0c;在搭载高通QCS8550平台的高算力AI模组上&#xff0c;成功运行了一系列大语言模型&#xff0c;包括LLaMA-2、通义千问Qwen、百川大模型、RedPajama、ChatGLM2、Vicun…

Linux驱动

字符设备驱动模型 在字符设备中使用struct cdev这种结构来描述设备。 应用程序&#xff1a;读写文件&#xff0c;点灯&#xff1b;获取按键。用一些接口调用驱动程序去实现一些引用。 open这些函数&#xff0c;是C库实现的。从而进入内核&#xff0c;C库怎么进入内核&#xf…

【开源】基于JAVA语言的企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

【大厂面试】之 美团(一面经含答案)

美团 一面 tcp三次握手&#xff0c;四次挥手。time-wait、close-wait状态。MSL代表什么&#xff1f;为什么time-wait是2MSL&#xff0c;可不可以更长&#xff1f;如果不设置time-wait有什么影响 time-wait是主动关闭方的一个状态&#xff1b;close-wait是被动关闭方的一个状态…

微擎模块 出现Error: template source ‘common/message’ is not exist!解决方法

今天有会员反馈微课堂分销中心打不开&#xff0c;错误提示模板找不到&#xff1a;Error: template source ‘common/message’ is not exist!&#xff0c;看了下这模板应该微擎框架通用的&#xff0c;进公众号会员管理-会员中心网址居然也打不开&#xff0c;提示一样的错误&…

多播ip地址配置和通信理解

经常有朋友问&#xff0c;为什么相同局域网的ip需要相同网段&#xff0c;为什么组播的网段可以不同&#xff1f; 比如&#xff1a; 在您的局域网&#xff08;192.168.1.0/24 网段&#xff09;中设置多播组时&#xff0c;您可以选择一个在本地网络范围内尚未使用的多播组地址。…

绿色装配式建筑——气膜建筑

伴随新时代的到来和发展理念的深入实施&#xff0c;装配式绿色建筑已经成为建筑业发展的主流趋势。本文将深入分析气膜建筑&#xff0c;采用绿色建筑技术和装配式的建筑模式&#xff0c;形成了一套完善的建筑体系。 气膜建筑以气膜结构为主体&#xff0c;采用新型高强度柔性薄膜…

批量归一化

目录 一、BN层介绍 1、深层神经网络存在的问题 2、批量归一化的解决方案 3、BN层作用位置 4、BN层在做什么 5、总结 二、批量归一化从零实现 1、实现批量归一化操作 2、创建BN层 3、对LeNet加入批量归一化 4、开始训练 三、简明实现 1、对LeNet加入批量归一化 2…

【Spring实战】02 配置多数据源

文章目录 1. 配置数据源信息2. 创建第一个数据源3. 创建第二个数据源4. 创建启动类及查询方法5. 启动服务6. 创建表及做数据7. 查询验证8. 详细代码总结 通过上一节的介绍&#xff0c;我们已经知道了如何使用 Spring 进行数据源的配置以及应用。在一些复杂的应用中&#xff0c;…

mybatis的二级缓存使用以及禁用

目录 mybatis 二级缓存配置有两处 全局设置 mapper 设置 测试代码 执行结果 源码执行逻辑 创建 SqlSession 二级缓存配置是否添加 解析 cache 标签 XMLMapperBuilder MapperBuilderAssistant CacheBuilder PerpetualCache SerializedCache LoggingCache 将 cach…

电商数据分析-01-电商数据分析指标

电商数据指标 电商数据分析涉及多个指标&#xff0c;这些指标可以帮助企业了解其业务表现、用户行为和市场趋势。以下是一些常见的电商数据分析指标&#xff1a; 销售指标&#xff1a; 总销售额&#xff08;GMV&#xff09;&#xff1a; 衡量特定时期内所有销售交易的总值。 平…

算法学习系列(十一):KMP算法

目录 引言一、算法概念二、题目描述三、思路讲解三、代码实现四、测试 引言 这个KMP算法就是怎么说呢&#xff0c;就是不管算法竞赛还是找工作笔试面试&#xff0c;都是非常爱问爱考的&#xff0c;其实也是因为这个算法比较难懂&#xff0c;其实就是很难&#xff0c;所以非常个…

【环境配置】虚拟环境配置

创建虚拟环境 conda create -n pytorch python3.9安装成功提示 激活虚拟环境 activate pytorch安装pytorch 查看 python 版本——python 退出 python——exit() 对照 python 与 pytorch 的对应关系 pytorch 地址&#xff1a; https://pytorch.org/get-started/previous-…

Python in Visual Studio Code 2023年12月发布

作者&#xff1a;Courtney Webster 排版&#xff1a;Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Python 和 Jupyter 扩展将于 2023 年 12 月发布&#xff01; 此版本包括以下公告&#xff1a; 可配置的调试选项已添加到“运行”按钮菜单可以使用 Pylance 显示类型层次…

JAVA JDK8时间类之Period、Duration、ChronoUnit的使用【详解】

JAVA JDK8时间类之Period、Duration、ChronoUnit的使用 1. Duration1.1 简介&#xff1a;用于时间间隔(秒、毫秒、纳秒等)1.2 案例 2. Period时间间隔(年、月、日)2.1 简介2.2 案例 3. ChronoUnit3.1 简介案例 4. 案例所有代码&#xff1a; 1. Duration 1.1 简介&#xff1a;用…

边缘计算AI智能盒子的视频源必须是固定点监控摄像头吗?

边缘计算AI盒子的视频输入源&#xff0c;要求是RTSP或者GB28181&#xff0c;可以是固定点监控摄像头&#xff08;枪机、球机等&#xff09;&#xff0c;也可以是移动摄像头&#xff0c;例如执法记录仪、智能安全帽、布控球等&#xff0c;但由于RTSP输入要求摄像头有固定IP&…

中庸 原文与译文

《中庸》是中国古代论述人生修养境界的一部道德哲学专著&#xff0c;是儒家经典著作之一&#xff0c;原属《礼记》第三十一篇&#xff0c;相传为战国时期子思所作。 其内容肯定“中庸”是道德行为的最高标准&#xff0c;认为“至诚”则达到人生的最高境界&#xff0c;并提出“…

算法——哈希表

哈希表简介 **是什么&#xff1a;**存储数据的容器有什么用&#xff1a;快速查找某个元素&#xff0c;时间复杂度O(1)&#xff0c;空间复杂度O(n)**什么时候使用哈希表&#xff1a;**频繁查找某一个数&#xff08;这里不要忘了之前的二分&#xff0c;时间复杂度O(logN)&#x…