Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 密钥库';密码管理_Java_Security_Ssl_Jsse - Fatal编程技术网

Java 密钥库';密码管理

Java 密钥库';密码管理,java,security,ssl,jsse,Java,Security,Ssl,Jsse,密钥库(无论它是用于“密钥库”还是“信任库”)在创建后使用load()方法初始化。一个版本需要与密钥库文件对应的InputStream,以及解密文件的密码。以编程方式为方法提供密码对我来说似乎很奇怪 例如,服务器使用密钥库存储其私钥和相关证书。密钥库中的信息是合理的,因此它受密码保护。以编程方式将密码传递给load()方法有什么问题?最佳做法是什么 另一个例子,但现在是关于信任库的。客户端有一个truststore,用于存储受信任CA的证书。据我所知,信任库不包含服务器的证书,只包含允许验证服务

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

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

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

谢谢

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

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


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

谢谢,我没有考虑修改信任库,这是显而易见的。我还有另一个相关问题。为什么TrustManagerFactory不需要密码进行初始化,而KeyManagerFactory需要密码?此外,在load()期间还提供了Keystore和Truststore的密码。KMF密码用于使用私钥。在这两种情况下,在将密钥库传递给任一工厂之前,您已经加载了密钥库本身。