我刚创建的Java密钥工具(对于服务器的服务器认证不具有一个CA证书)一个信任。不过,我只是发现了一些奇怪的。我开始我的客户是这样的:

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

(注意:有未指定密码)

上面的呼叫起作用。


然而,当我尝试这样:

java -classpath <STUFF> Client

它不工作。 (显然它不工作,它需要的信任)。


我期待需要在此选项中通过(但我没有):

-Djavax.net.ssl.trustStorePassword=mypass

:你不是需要密码才能访问的信任?仅仅是修改密码?约一个密钥是什么?

有帮助吗?

解决方案

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

其他提示

在除了@帕 - thivent的优良的答案:

在库密码有两个目的 - 如果没有提供,keytool拒绝让你更换新的例如内容存储的内容可通过删除现有或添加新证书的条目。

如果您有写访问,更新使用keytool密钥库文件(这不是setuid的)当然,你可以使用其他工具,它并没有检查密码的内容替换。而我们知道,存储和它的格式是可读没有密码,所以大概我们可以写我们想要什么就有什么。

这就是验证密码来项。当商店条目被写入出,所提供的存储区密码被用来计算一个消化的商店内容,由密码作为咸。这是一个单向散列/消化,所以没有密码,则无法确认店里内容是否已被篡改或没有。同样,有人恶意谁不知道密码也不能修改商店的内容,并产生将通过该密码生成的摘要哈希。

这就是为什么当你提供无密码,keytool只是警告你,它无法验证,店内有没有被篡改。如果提供的无效的密码,或商店的的被篡改,你会得到不同的信息:

Enter keystore password: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

keytool无法重新创建基于当前储存的内容,你提供的密码现有的散列摘要,因此无论是密码不正确,或密钥库被攻破 - keytool也说不清,但它假定您或软件读取商店知道。

注意的是,虽然术语密钥库通常使用时,也同样是指密钥库信任库。少-通常,一个密钥库是更频繁的身份存储并包含身份和他们的秘密,私有密钥,如例如所使用由服务器运行HTTPS。 A 信任的往往仅包含公共密钥和没有私人密钥,所以没有秘密,但重要的是要确定是什么身份的一种的客户的信任。

如果您不指定信任,默认的来代替。我相信,你会得到一个错误,那你就需要以信任你请求主机指定一个信任?默认信任驻留在$ JAVA_HOME / lib / security中/ jssecacerts。

默认情况下,JRE信任存储的密码是“的changeit”。如果要更改默认的信任存储编程使用Java区(cacerts)的密码,那么请你经历的此链接

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top