密钥库(无论是用于“密钥库”还是“信任库”)在使用load()
方法创建后初始化。一个版本期望与密钥库文件对应的InputStream
和用于解密文件的密码。以编程方式为方法提供密码对我来说似乎很奇怪。
例如,服务器使用密钥库来存储其私钥和关联的证书。密钥库中存在的信息是合理的,因此它受密码保护。以编程方式将密码传递给load()
方法有什么问题?什么是最佳做法?
另一个例子,但现在关于信任商店。客户端具有信任库,其中存储可信CA的证书。据我了解,信任库不包含服务器的证书,只包含允许验证服务器证书的CA的证书。我看到的一个信任库示例是JRE中存在的一个(在security
文件夹中 - cacerts
)。通过查看配置,我可以看到它受默认密码changeit
的保护。我知道信任库是使用密钥库实现的,所以它有(或者可能是可选的?)使用密码加密。但是,由于信任库通常将公共信息(可信CA证书)存储在文件中,为什么建议更改密码?
由于
答案 0 :(得分:2)
以编程方式为方法提供密码似乎很奇怪 我
我不确定为什么这会很奇怪。应用程序需要能够在某个时刻获取密钥库的内容。不知何故,密码需要传递给它。将其传递给load()
方法并不比其他解决方案更有意义(当然,避免使用硬编码)。或者,您可以使用使用回调的方法。如果您认为不合适,可以使用PKCS#11提供商和硬件令牌(虽然您仍然需要在某处输入密码/ PIN)或使用类似Apple KeychainStore(密码不在哪里)使用,但操作系统钥匙串服务负责处理。)
关于信任库,实际上有两个密码在使用中。使用JKS格式时,它们可以不同。一个保护密钥库本身,一个保护对私有条目(getKey
)的访问。在这种情况下,密钥库密码用于防止未授权方更改信任库(以及添加自己的CA或服务器证书)。