您是否不需要密码来访问信任库(由JavaKeyTool创建)?

您是否不需要密码来访问信任库(由JavaKeyTool创建)?,java,keystore,keytool,truststore,Java,Keystore,Keytool,Truststore,我刚刚用JavaKeyTool创建了一个信任库(用于对没有CA证书的服务器进行服务器身份验证)。然而我只是注意到了一些奇怪的事情。我是这样开始我的客户的: java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client 问题:访问信任库是否不需要密码?密码只是为了修改吗?密钥库呢?如果不指定信任库,则使用默认的信任库。我假设,您得到一个错误,您需要指定一个信任库

我刚刚用JavaKeyTool创建了一个信任库(用于对没有CA证书的服务器进行服务器身份验证)。然而我只是注意到了一些奇怪的事情。我是这样开始我的客户的:

java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client


问题:访问信任库是否不需要密码?密码只是为了修改吗?密钥库呢?

如果不指定信任库,则使用默认的信任库。我假设,您得到一个错误,您需要指定一个信任库来信任您请求的主机?默认的信任库位于$JAVA_HOME/lib/security/jssecacerts中。

密码用于保护密钥库的完整性。如果您没有提供任何存储密码,您仍然可以读取密钥库的内容。命令
keytool-list
演示此行为(使用空密码)。

默认情况下,JRE信任存储密码为“changeit”。如果您想使用Java以编程方式更改默认信任存储(cacerts)密码,请执行以下操作。

此外:

密钥库密码有两个用途-如果未提供,
keytool
拒绝让您使用新内容替换存储区的内容,例如删除现有的或添加新的证书条目

当然,如果您具有使用
keytool
(不是setuid)更新密钥库文件的写入权限,则可以使用另一个未检查密码的工具替换内容。我们知道存储及其格式在没有密码的情况下是可读的,所以我们可以在那里写我们想要的东西

这就是验证密码的作用。当写入存储条目时,所提供的存储密码用于计算存储内容的摘要,该摘要由密码添加。这是单向哈希/摘要,因此如果没有密码,您无法验证存储内容是否被篡改。同样,不知道密码的恶意用户也无法修改存储的内容并生成该密码将生成的摘要哈希

这就是为什么当您不提供密码时,
keytool
只是警告您它无法验证存储是否被篡改。如果您提供的密码无效,或者存储被篡改,您将收到另一条消息:

Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
keytool
无法根据当前存储内容和您提供的密码重新创建现有哈希摘要,因此要么密码不正确,要么密钥库受损-
keytool
无法判断,但它假定您或读取存储的软件知道


请注意,虽然术语keystore通常使用,但它同样指的是keystore和truststore。不太常见的是,密钥库通常是身份存储,包含身份及其秘密私钥,例如由运行HTTPS的服务器使用。信任库通常只包含公钥而不包含私钥,因此没有秘密,但对于确定客户信任的身份很重要。

嗨,B哦,是的,我知道这是默认设置,但这并不能回答我的问题。显然,默认值不起作用,而我指定的是。我的问题是:为了阅读信任库,您需要密码吗?有默认密码吗?@Pascal,有。我使用的服务器没有CA证书,因此它需要一个信任库,以便它可以对服务器进行ssl身份验证。我也不明白为什么信任库需要密码,它是ssl的客户端部分。特别是,当CA不参与时。您解决了这个问题吗?@sixtyfootersdude是的,完整性没有检查,但是您仍然可以访问密钥库。这个答案是关于密钥库的,但主要问题是关于信任库的。我很困惑,回答得很好。我还注意到,不同的商店类型以不同的方式处理密码。虽然没有为JKS类型提供密码只会导致无法检查存储完整性,但是没有为PKCS12密钥库提供密码会导致空列表(当使用
keytool-list
时),因此如果您不知道密码,就没有机会使用存储。
-Djavax.net.ssl.trustStorePassword=mypass
Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect