微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为安卓应用提供私钥和证书

如何解决为安卓应用提供私钥和证书

我的应用程序需要使用网络服务,我想使用证书对服务器进行身份验证。

但是,将带有签名密钥的密钥库嵌入到包中被认为是不好的做法(并明确警告:https://developer.android.com/google/play/asi),因为它可以被提取和解密。

我可以使用 android 提供的密钥库生成私钥并使用它 - 但我仍然需要对其进行签名以便在服务器端对其进行验证。

在理想情况下,应该有证书链,具有受信任的根权限并包含我可以在服务器端验证的已签名应用程序包的元数据。

或者是否可以在证书生成过程中使用包签名来证明自签名证书源自未篡改的包?

解决方法

坏人(“Trudy”)可以刷写任何自定义 Android ROM,包括在 APK 安装过程中删除包证书验证的 ROM。因此,您的应用对其 Android 主机操作系统进行的任何查询本质上都是对 Trudy 的请求。

因此,可能会发现安装了一个带有纯正操作系统的被黑 APK。但是对于一个掺假的操作系统,所有的赌注都没有了。

我认为客户端自我验证的任何解决方案都需要对主机操作系统进行权威验证。不容易。

是否可以在证书中使用包签名 证明自签名证书起源的生成过程 形成未篡改的包?

(1) 您的意思是每个客户端在安装后都会生成不同的自签名证书,并以某种方式将其与 apk 包签名进行交叉引用以进行身份​​验证?那么不,这不会阻止特鲁迪。 (而且它在身份验证中也没有用。)

(2) 您的意思是客户端在 APK 中嵌入了通用私钥,并且包证书上的元数据可用于验证私钥?我不知道包证书元数据中是否有任何可用字段可以添加此信息。这是您建议的一种有趣的方法。然而,由于 Trudy 可能是操作系统,理论上 Trudy 可以模拟它想要的任何结果。我不认为这会阻止 Trudy。

Proguard 开发人员的这篇 (SO) 帖子提供了 5 个处理 Android 应用程序机密的选项。他指出:

本质上,客户端没有任何东西是牢不可破的,但您可以 当然提高标准。

,

我了解您希望使用用户的私钥对 Web 服务 (API) 进行用户身份验证,并且签名令牌将在服务器上使用用户注册时已在那里注册的用户证书或公钥进行验证。

您是想使用外部 USB Token 来安全地存储私钥,还是希望将私钥存储在 Android 设备内存中?

我们已经在桌面(https://web.signer.digital/Home 中的示例)上处理过此类要求,但未在 Android 上处理过。我知道我们可以使用 OTG USB 将 USB 加密令牌(如 ePass2003 或其他)连接到 Android 设备,并且某些设备的 Android 驱动程序可以从 Android 访问,但实际上并没有使用。但这可以作为您研究的方向。

,

移动应用是公共应用,因为最终用户可能会查看和修改应用代码。因此,您的应用程序无法对恶意用户保密。这包括双向 TLS (mTLS) 所需的客户端证书。

将任何客户端证书存储在 Android 设备上用于机器到机器(不要将 machine to machineuser to machine 混用)mTLS 身份验证是不安全的。它可以导出,然后由任何用户在其他设备上使用。

操作系统(Android 也是如此,某些浏览器,例如 Firefox 可能有自己的)提供证书存储,其中存储 CA 证书以及可以存储客户端证书的位置。

最好将用户(为用户颁发,而不是为应用程序/机器颁发)客户端证书存储在那里。然后移动应用程序应该有一个选项来选择应将哪些用户客户端证书用于 mTLS。但是 I want to authenticate my application without any user interaction. 是不可能的。必须至少有初始用户交互:用户客户端证书导入到客户端存储、mTLS 应用程序配置。恕我直言,这是最好且安全的 mTLS 实现。真实世界示例:Rocket Chat app

,

您要求基于反向 TLS 的验证?通常,客户端验证网络服务是因为客户端的主机操作系统信任特定的 CA 证书,该证书也用于生成网络服务 TLS 证书。

区别在于:

网络服务器由作者保护和控制。客户端设备不是。因此,在应用程序中使用私钥对发送到服务器的数据进行签名是徒劳的。

不过,您可以通过服务器端验证探索 Google's Licensing implementation,以强制合法安装和许可的应用程序可以联系服务器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。