cacerts和密钥库之间有什么区别?


112

cacerts和密钥库之间有什么区别?

如果我使用在这些链接中找到的定义cacertskeystore,则它们似乎是证书的集合,但是是在(Java)分布式系统的上下文中。SSL连接期间使用哪一个进行身份验证?两者还是只是其中之一,还是交替?


3
cacerts = 证书颁发机构证书
彼得·莫滕森

Answers:


139

“ cacerts”是一个信任库。信任库用于验证对等方。密钥库用于验证您的身份。


嗨,EJP,谢谢您的回答,在引用您的任何答案之前,我都曾引用过这句话;)因此,如果我用弗朗西斯和潘吉亚总结了您的答案,请澄清一下。Cacerts用于对请求访问或连接的客户端进行身份验证,对于密钥库,我不太了解为什么要对自己进行身份验证。:)
dimas

20
再次阅读我写的内容。(1)信任库用于对等体进行身份验证如果您是客户端,则服务器是对等方。如果您是服务器,反之亦然。(2)如果你的服务器,或者如果你的客户端和服务器请求客户端身份验证,你必须自己进行验证,以对等,所以你需要自己的证书和私钥,这是在密钥库。(令人困惑的是,两者都使用了相同的文件格式,这被称为密钥库文件。)
Lorne侯爵(Marquis of Lorne

好的,但是只是一个后续问题。我的cacerts包含存储在密钥库中的所有证书等等。尽管包括我应用程序的私有证书在内的某些证书​​具有不同的别名,但它们具有相同的数字签名。因此,理想情况下,如果我连接到服务器并请求身份验证,就可以使用cacerts吗?
dimas

我不了解有关“不同别名”的部分。有什么不同?您的最后一个问题可以通过实验回答。
2014年

3
@ raja777m cacerts是您信任的人。我看不出有什么理由在环境菜单之间进行更改,除非您犯了对测试服务器使用自签名证书的错误:一个错误,因为这意味着您在测试和生产中使用了不同的代码路径。
罗恩侯爵

41

cacerts是Java存储根CA的公共证书的地方。Java使用cacerts对服务器进行身份验证。

密钥库是Java存储客户机的私钥的地方,以便当服务器请求客户机认证时它可以将其共享给服务器。


@dimas显然,但是他真正的意思是“请求”。
罗恩侯爵

1
@ user207421我相信在这个答案中,Java应用程序正在扮演http客户端的角色,而我们的Java App调用的http url是服务器应用程序。因此,我们的客户端Java应用程序的KeyStore应该同时具有私钥+证书(已签名的公钥),并且仅将证书发送到服务器应用程序,对吗?而且,如果服务器应用程序也是Java应用程序,它将使用其自己的cacert文件验证客户端Java应用程序发送的证书,对吗?
user104309 '18

0

证书是可颁发证书的受信任签名机构的详细信息。这是大多数浏览器所具有的,这是由于确定哪些证书是真实的。Keystone拥有与您的服务相关的证书以对客户端进行身份验证。


-2

检查您的JAVA_HOME路径。随着系统寻找位于中的java.policy文件JAVA_HOME/jre/lib/security。您的JAVA_HOME应该始终为../JAVA/JDK


3
感谢您的努力,但您应该阅读并理解EJP的答案。
dimas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.