0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使用TLS/SSL Pinning保护Android应用程序呢?

哆啦安全 来源:虎哥Lovedroid 2023-12-27 13:41 次阅读

使用TLS/SSL Pinning保护Android应用程序

在现代术语中,“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的文件。

80a69142-a470-11ee-8b88-92fbcf53809c.png

定义受信任的域和固定值

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




example.com

 
ReplaceWithYourPin
 
ReplaceWithYourPin


固定值是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文件,并向元素添加以下属性:


...

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

现在,让我们把我们的配置测试一下! 使用 URL 进行 HTTPS 连接

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

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

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







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • URL
    URL
    +关注

    关注

    0

    文章

    134

    浏览量

    14832
  • SSL
    SSL
    +关注

    关注

    0

    文章

    119

    浏览量

    25497
  • XML技术
    +关注

    关注

    0

    文章

    15

    浏览量

    5990
  • TLS
    TLS
    +关注

    关注

    0

    文章

    42

    浏览量

    4164

原文标题:使用TLS/SSL Pinning保护Android应用程序

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    飞凌嵌入式开发板Android应用程序开发-入门级

    简介:随着Android系统的普及,越来越多的学生,工程师开始步入了Android开发的行列。那么对于一个从来没有接触过Android开发的人,该从哪里入手,怎样做出自己的第一个
    发表于 05-20 14:41

    PIC18F67J60(旧TCP/IP协议栈)与硬件SSL / TLS

    嗨,有可能在“OLTD”TCP/IP STACK硬件SSL/TLS中实现。对于软件解决方案,没有更多的资源。谢谢帮助。安迪 以上来自于百度翻译 以下为原文 Hi, It is possible
    发表于 10-08 15:56

    用2048位的密钥大小与TLS SSL服务器通信?

    嗨,我知道这个话题是个老话题。我读过很多类似的帖子,但是我不能让我的板工作。我想用简单的TCP客户机把我的板(只是一个GET请求)连接到TLS/SSL服务器。我看到微芯片支持最多1024个RSA密钥
    发表于 04-02 10:12

    mbed TLS的目标是什么

    前言 mbed TLS(以前称为PolarSSL)是TLSSSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可与Apache许可证2.0版(与GPLv2许可也可)。网站上指出,mbed
    发表于 07-19 06:11

    怎样为zigbee协议开发应用程序

    怎样为zigbee协议开发应用程序?其设计过程是怎样的?
    发表于 09-24 11:52

    Android程序怎样通过SSL单向认证方式连接MQTT服务器的

    如何对Android程序进行测试Android程序怎样通过
    发表于 01-20 06:06

    如何STM32F417XX系列控制器使用PolarSSL免费的SSL/TLS

    这文档主要描述了如何STM32F417XX系列控制器使用PolarSSL免费的SSL/TLS库。
    发表于 12-02 07:21

    求助,现有的SSL/TLS库或如何为SPC58EC-DISP导入外部SSL/TLS库?

    我目前正在评估 SPC58EC-DISP。我在 SPC5-STUDIO 中尝试了几个示例,并通过 CAN 和串口成功发送/读取信号。接下来,我想创建一个应用程序(使用 PKI 进行身份验证)来验证
    发表于 01-05 07:34

    有人在esp32上成功跑过TLS 1.3吗?

    测下MQTT over TLS 1.3在menuconfig里面enable了tls 1.3第一次 tls 1.3 的handshake没问题,ssl状态在WRAPUP后设置为
    发表于 02-14 07:10

    TLSSSL有什么区别?

    请问TLSSSL有什么区别?
    发表于 11-21 16:56

    ssl是什么意思

    ssl是什么意思,SSL安全套接层及其继任者传输层安全TLS是为网络通信提供安全及数据完整性的一种安全协议。TLSSSL在传输层对网络连接
    发表于 12-21 16:01 1.5w次阅读

    科普:简化SSL/TLS的握手过程

    伴随所有握手,SSL / TLS握手是一切开始的地方。SSL / TLS握手涉及一系列步骤,通过该步骤,双方(客户端和服务器)彼此进行验证,并开始通过安全
    的头像 发表于 06-27 17:36 2523次阅读

    SSLTLS协议运行机制的资料详细概述

    联网的通信安全,建立在SSL/TLS协议之本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。
    发表于 07-22 08:00 2次下载
    <b class='flag-5'>SSL</b>和<b class='flag-5'>TLS</b>协议运行机制的资料详细概述

    SSL\TLS协议是什么?

    SSL英文全称为Secure Sockets Layer,译为安全套接层。TLS英文全称为(Transport Layer Security,译为传输层安全,是SSL的继承者。SSL\
    的头像 发表于 02-15 14:01 1495次阅读
    <b class='flag-5'>SSL</b>\<b class='flag-5'>TLS</b>协议是什么?

    怎样使用Kiuwan保护Android应用程序呢?

    Kiuwan扫描 30多种语言的安全漏洞。这包括今天用于构建移动应用程序的语言:Java,JavaScript,Swift,Objective-C等。
    的头像 发表于 03-13 16:09 728次阅读