所以,这是我拍摄的场景。
我有一个应用服务器。在该应用程序服务器上是受密码保护的密钥库文件。密钥库文件中是一个私钥,我必须以编程方式从已部署的war文件中获取访问权。
我不想在我的代码中存储密码。
war文件是在单独的开发人员计算机上构建的。在构建时,提供开发人员私钥,对war文件进行签名。
所述开发人员的公共证书已导入应用程序服务器的密钥库可信证书。
在代码中,我希望能够加载密钥库并检索私钥,而无需提供密钥的密码。我希望让受信任证书签名的代码足以成功检索密钥。
如果恶意用户访问应用程序服务器,他们将无法修改签名代码,因为这会破坏签名。他们也无法部署自己的代码,因为他们没有可信的私钥。最后,他们无法将自己的证书作为可信证书导入密钥库,因为他们没有密钥库密码。
这可能吗?如果没有,那为什么不呢?
答案 0 :(得分:1)
您无法在没有密码的情况下在“Java密钥库”格式密钥存储区中检索您的私钥。
它与“身份验证”无关。在JKS文件中,私钥是加密的,密码是密钥。没有该密钥,就无法恢复私钥。
您不必将私钥存储在Java密钥库中。例如,您可以将其存储在未加密的文件中。
或者,如果您需要与现有代码兼容,则可以实现自己的Provider
并创建不使用加密的KeyStore
实现。大多数应用程序需要KeyStore
支持选项来控制实例化的提供程序和密钥库的类型。
在其中任何一种方法中,您仅依靠操作系统的文件权限来限制对私钥的访问。
更安全的方法是在启动时让应用程序提示输入密码。
答案 1 :(得分:0)
无法转换应用程序由特定证书的密钥签名以便能够访问密钥库文件的事实。您可以做的最好的事情是以其他方式向应用程序提供密钥库的密码 - 使用属性或JNDI或配置文件或类似的东西。