密钥库的密码管理

时间:2012-07-18 12:12:42

标签: java security ssl jsse

密钥库(无论是用于“密钥库”还是“信任库”)在使用load()方法创建后初始化。一个版本期望与密钥库文件对应的InputStream和用于解密文件的密码。以编程方式为方法提供密码对我来说似乎很奇怪。

例如,服务器使用密钥库来存储其私钥和关联的证书。密钥库中存在的信息是合理的,因此它受密码保护。以编程方式将密码传递给load()方法有什么问题?什么是最佳做法?

另一个例子,但现在关于信任商店。客户端具有信任库,其中存储可信CA的证书。据我了解,信任库不包含服务器的证书,只包含允许验证服务器证书的CA的证书。我看到的一个信任库示例是JRE中存在的一个(在security文件夹中 - cacerts)。通过查看配置,我可以看到它受默认密码changeit的保护。我知道信任库是使用密钥库实现的,所以它有(或者可能是可选的?)使用密码加密。但是,由于信任库通常将公共信息(可信CA证书)存储在文件中,为什么建议更改密码?

由于

1 个答案:

答案 0 :(得分:2)

  

以编程方式为方法提供密码似乎很奇怪   我

我不确定为什么这会很奇怪。应用程序需要能够在某个时刻获取密钥库的内容。不知何故,密码需要传递给它。将其传递给load()方法并不比其他解决方案更有意义(当然,避免使用硬编码)。或者,您可以使用使用回调的方法。如果您认为不合适,可以使用PKCS#11提供商和硬件令牌(虽然您仍然需要在某处输入密码/ PIN)或使用类似Apple KeychainStore(密码不在哪里)使用,但操作系统钥匙串服务负责处理。)

关于信任库,实际上有两个密码在使用中。使用JKS格式时,它们可以不同。一个保护密钥库本身,一个保护对私有条目(getKey)的访问。在这种情况下,密钥库密码用于防止未授权方更改信任库(以及添加自己的CA或服务器证书)。