【发布时间】:2023-11-10 19:40:01
【问题描述】:
我使用自签名证书和使用 openssl 生成并存储在密钥库中的密钥在运行同一应用程序的两台 Android 设备之间使用 SSL。 问题是私有密钥库必须以某种方式嵌入到应用程序包中,因此任何攻击者都可以使用。我相信这将允许攻击者窥探会话并解密两部手机之间的数据。
我没有使用或需要 PKI 的任何其他功能,我只是提供两个密钥库,因为 SSL 连接设置需要它们。
是否存在不需要预定义 PKI 并在运行时动态生成自己的密钥的安全 SSL 密码?
我研究过在运行时生成自己的密钥 - 在 Java 中创建密钥很容易,但 KeyStore.setEntry() 需要 X509 证书链而不仅仅是公钥,而且 Android 不包含要生成的 JCE 代码X509。我可以通过包含 BouncyCastle(Android 兼容版本称为 SpongyCastle)库来做到这一点,但这会增加我的应用程序包大小的开销。
无法访问 Internet 上的第三方信任服务器,两部手机可能位于无法访问 Internet 的私有 WLAN 上。
作为一个不错的奖励,我希望能够相信应用程序正在与自己通信,而不是有人从 PC 上嗅探协议,但我认为这是不可能的,因为应用包内容将始终可用。
【问题讨论】:
-
我已经建立了这样的基础设施,并愿意分享代码。不幸的是,我在 android 端(*.com/questions/68342319)遇到了麻烦,一旦我解决了这个问题,我会与你分享我的代码。
标签: java android security ssl keystore