0

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

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

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

谢谢

4

1 回答 1

2

以编程方式向该方法提供密码对我来说似乎很奇怪。

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

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

于 2012-07-18T12:58:55.740 回答