cacerts 和 keystore 有啥区别?
Posted
技术标签:
【中文标题】cacerts 和 keystore 有啥区别?【英文标题】:What is difference between cacerts and keystore?cacerts 和 keystore 有什么区别? 【发布时间】:2013-07-29 22:14:25 【问题描述】:cacerts和keystore这两者有什么区别?
如果我使用这些链接中的定义 cacerts 和 keystore,它们似乎是证书的集合,但在 (Java) 分布式系统的上下文中。哪一个用于在 SSL 连接期间进行身份验证?两者都或只是其中之一或替代?
【问题讨论】:
cacerts = 证书颁发机构证书? 【参考方案1】:'cacerts' 是一个信任库。信任库用于对对等方进行身份验证。密钥库用于验证您自己。
【讨论】:
您好 EJP 感谢您的回答,我在阅读您的任何回答之前引用了这一点;)所以,如果我在 Francis 和 Pangea 中总结您的回答,请澄清一下。 Cacerts 用于对请求访问或连接的客户端进行身份验证,对于密钥库,我不太明白为什么要对自己进行身份验证。 :) 再读一遍我写的。 (1) 使用信任库对peers 进行身份验证。 如果您是客户端,则服务器是peer;如果您是服务器,反之亦然。 (2) 如果您是服务器,或者您是客户端并且服务器请求客户端身份验证,则您必须自己进行身份验证才能 对等点,因此您需要自己的证书和私钥,它们位于密钥库中。 (令人困惑的是,两者使用相同的文件格式,称为密钥库文件。) 好的,但只是一个后续问题。我的 cacerts 包含存储在密钥库中的所有证书等等。尽管包括我的应用程序的私有证书在内的某些证书具有不同的别名,但它们具有相同的数字签名。所以理想情况下,如果我连接到服务器并请求身份验证,我可以使用我的 cacerts? 我不明白关于“不同别名”的部分。有什么不同?您的最后一个问题可以通过实验来回答。 @raja777mcacerts
是您信任的人。我认为没有任何理由在环境之间进行更改,除非您犯了为测试服务器使用自签名证书的错误:这是一个错误,因为这意味着您在测试和生产中使用了不同的代码路径。【参考方案2】:
cacerts 是 Java 存储根 CA 的公共证书的地方。 Java 使用 cacerts 对服务器进行身份验证。
Keystore 是 Java 存储客户端私钥的地方,以便在服务器请求客户端身份验证时将其共享给服务器。
【讨论】:
@dimas 显然,但他真正的意思是“请求”。 @user207421 我相信在这个答案中,Java App 正在扮演 http 客户端的角色,而我们的 Java App 调用的 http url 是服务器应用程序。所以我们客户端 Java 应用程序的 KeyStore 应该同时具有私钥 + 证书(签名的公钥)并且只将证书发送到服务器应用程序,对吗?如果服务器应用程序也是 Java 应用程序,它会使用自己的 cacert 文件验证我们的客户端 Java 应用程序发送的证书,对吧? == 不只是共享私钥 ==,但是是的,它们可以用于(客户端)身份验证【参考方案3】:Cacerts 是可以颁发证书的可信签名机构的详细信息。这是大多数浏览器所具有的,因为这些证书被确定为真实的。
Keystore 拥有与服务相关的证书来验证客户端。
【讨论】:
【参考方案4】:检查您的 JAVA_HOME 路径。当系统查找位于JAVA_HOME/jre/lib/security
的java.policy 文件时。您的 JAVA_HOME 应始终为 ../JAVA/JDK
。
【讨论】:
感谢您的努力,但您应该阅读并理解 EJP 的回答。以上是关于cacerts 和 keystore 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
为 SpringBoot 应用程序指定密钥库时 javax.net.ssl.keyStore 和 server.ssl.key-store 属性有啥区别