【发布时间】:2014-11-29 11:48:28
【问题描述】:
我想将我的 RSA 私钥存储在安全的地方,应用程序在将数据发送到服务器之前使用该私钥对其数据进行签名,这样窃取密钥要比从应用程序文件夹中复制要难得多。
我知道 Java KeyStore 可用于存储密钥并在运行时加载它们,但是如何在没有签名 jar 密码的情况下从 KeyStore 加载密钥?
例如,我已将密钥“mykey”加载到 KeyStore,并签署了 App.jar。我想在运行时从KeyStore 自动加载密钥,而不指定KeyStore 的密码,如果请求它的应用程序已签名。
也许,我没有正确理解KeyStore 的原理。但任务是对发送到服务器的数据进行签名并安全地存储密钥。 (该应用是一个POS应用,所以它应该是自动加载的,启动时不需要任何密码)。
【问题讨论】:
-
你不能。你会在哪里存储密码?在代码中?反编译!在文件系统中?然后,您可以轻松地将未加密的私钥存储在同一个地方。这是不可能的。
-
我虽然可以将 KeyStore 配置为仅向应用程序提供由指定证书签名的私钥。这样只有我编写和签名的应用程序才能在没有密码的情况下从 KeyStore 获取密钥。有没有其他方法可以在发送之前完成对应用数据进行签名的任务?
-
如果这是一个功能:我会简单地获取您应用程序的证书(因为它未加密,它是您应用程序中的公开信息),将其交给密钥库并让它提取密钥我。 Keystore 无法知道证书来自哪里,我或使用该证书签名的某个应用程序。您可以使用密码 IRL 保护密钥库,但这会使该密码成为新的秘密,无处可放。
-
那么,Java 怎么知道谁签署了这个应用程序?那怎么没有人可以用其他公司的签名来签署他们的代码呢?
-
@zapl 解释得很漂亮!这是一条死路,很多人都走下了这条路。
标签: java security key rsa keystore