【发布时间】:2021-05-07 15:04:29
【问题描述】:
我的应用需要使用网络服务,我想通过证书对服务器进行应用验证。
但是,将带有签名密钥的密钥库嵌入包中被认为是不好的做法(并明确警告:https://developer.android.com/google/play/asi),因为它可以被提取并解密。
我可以使用 android 提供的密钥库生成私钥并使用它 - 但我仍然需要对其进行签名以便在服务器端对其进行验证。
在理想情况下,应该有证书链,具有受信任的根授权并包含我可以在服务器端验证的签名应用程序包的元数据。
或者是否有可能在证书生成过程中使用包签名来证明自签名证书源自未篡改的包?
【问题讨论】:
-
您是否要进行证书固定?还是这有什么不同?
-
否 - 我尝试为应用程序提供可用于身份验证的私钥和证书,而无需将密钥库存储在 apk 存档中。
-
好的,只是确保这不是一回事,我没有大量的证书固定经验,但听起来很熟悉,所以只是想确保它不相关跨度>
-
对不起,如果我听起来很菜鸟,但为什么要使用证书?我的意思是,证书(另外 pinning )不是为了让客户端验证他们正在向真实服务器而不是 MIM 发出请求,而不是其他方式。为什么不能使用某种授权技术,如密钥、承载和刷新令牌?再次抱歉新手评论)
-
通常客户端使用服务器证书来验证服务器是否真实(它使用适当的权限链签名,并且客户端信任此权限)。最常见的用例。并且服务器也可以以其他方式使用相同的技术 - 客户端提供由适当权限保护的公钥,以针对服务器验证自己。在我的用例中,服务器对客户端密钥有明确的了解(自签名证书放置在服务器端的信任库中) - 因此双方都可以建立正确的 TLS 连接并信任它。
标签: android ssl certificate keystore signing