是否可以在没有密码的情况下从签名的java代码访问密钥库中的密钥?

是否可以在没有密码的情况下从签名的java代码访问密钥库中的密钥?,java,security,keystore,Java,Security,Keystore,这就是我拍摄的场景 我有一个应用服务器。该应用服务器上有一个受密码保护的密钥库文件。密钥库文件中有一个私钥,我必须通过编程方式从部署的war文件中访问该私钥 我不想在我的代码中存储密码 war文件构建在单独的开发人员机器上。在构建时,将提供开发人员私钥,并对war文件进行签名 所述开发人员的公共证书已导入应用服务器的密钥库可信证书 在代码中,我希望能够加载密钥库并检索私钥,而无需为密钥提供密码。我希望由可信证书对代码进行签名将足以验证成功检索密钥 如果恶意用户要获得对应用程序服务器的访问权,他们

这就是我拍摄的场景

我有一个应用服务器。该应用服务器上有一个受密码保护的密钥库文件。密钥库文件中有一个私钥,我必须通过编程方式从部署的war文件中访问该私钥

我不想在我的代码中存储密码

war文件构建在单独的开发人员机器上。在构建时,将提供开发人员私钥,并对war文件进行签名

所述开发人员的公共证书已导入应用服务器的密钥库可信证书

在代码中,我希望能够加载密钥库并检索私钥,而无需为密钥提供密码。我希望由可信证书对代码进行签名将足以验证成功检索密钥

如果恶意用户要获得对应用程序服务器的访问权,他们将无法修改已签名的代码,因为这将破坏签名。他们也无法部署自己的代码,因为他们没有可信的私钥。最后,他们将无法将自己的证书作为受信任证书导入密钥库,因为他们没有密钥库密码


这可能吗?如果不是,那为什么不呢?

没有一种方法可以将应用程序由特定证书的密钥签名这一事实转化为能够访问密钥库文件。您最好以其他方式向应用程序提供密钥库的密码—使用属性、JNDI或配置文件或类似的东西。

如果没有密码,您无法在“Java密钥存储”格式的密钥存储中检索私钥

它与“身份验证”无关。在JKS文件中,私钥被加密,密码就是密钥。没有该密钥,就无法恢复私钥

不过,您不必将私钥存储在Java密钥存储中。例如,您可以将其存储在未加密的文件中

或者,如果需要与现有代码兼容,可以实现自己的
提供程序
,并创建一个不使用加密的
密钥库
实现。大多数需要
密钥库的应用程序都支持控制提供程序和实例化的密钥库类型的选项

在这两种方法中,您都完全依赖操作系统的文件权限来限制对私钥的访问


更安全的方法是让应用程序在启动时提示输入密码。

我没有收到您的问题,但这似乎与此相关:如果我在这里错了,很抱歉。根据我从您的评论中收集的信息,另一种解决方案是在您的应用程序服务器上使用JNDI。因此,您不必在代码中保存密码。这就是我所担心的。我不想将密码物理地存储在文件系统的任何位置,因为如果它位于文件系统上,它很容易受到攻击。我只是希望能有另一种解决办法。