我试图通过外行术语理解信任商店和密钥库之间的区别。它们如何与java中的cacerts相关?我经历了很多线程,但仍然无法理解何时使用密钥库以及何时使用信任库。
当我尝试通过https对Web服务进行API调用时,我继续收到SSL证书问题。 HTTPS服务使用的是自签名证书,我将证书导入到我的cacert,问题仍然存在。我在哪里导入此服务器证书?如果导入解决了问题,我在部署应用程序时是否需要在其他环境中导入证书?
我们的应用程序使用JKS文件,需要什么?当我查看JKS文件时,我看到其中有2个证书。我们为什么要用它?
对于信任商店,我看到有人说信任自己。我们相信自己有什么?信任库是否使用任何证书?我何时应该使用密钥库而不是信任库?
任何理解这一点的帮助对我都很有帮助。
答案 0 :(得分:0)
Truststore-一个容器,其中包含应被应用程序又称为受信任证书的容器。例如,这可以是自签名证书,也可以是不在全局列表CA上的由CA机构签名的证书。例如,公司可以拥有自己的CA以允许使用其自己的证书。将此类CA添加到您的信任库(应用或在系统中安装)将验证CA签署的所有其他证书。
Keystore-存放私钥的容器。这样,应用程序就可以接受使用相应公钥初始化的通信。
在Java中,它们可以都是JKS格式,并且在技术上是同一回事。出于安全原因,您可以将这些逻辑上分成2个容器。
您似乎可能不知道的是,PKI的工作方式是始终拥有一对唯一的公用密钥和专用密钥。公钥用于加密通信,而私钥用于解密通信。当客户端通过SSL通道连接时,它使用公共密钥来建立密钥交换。如果服务器身份合法,它将具有私钥,并且可以继续进行交换。
现在您的问题
我必须在哪里导入此服务器证书?如果导入 解决了问题,我是否需要导入其他证书 部署应用程序时的环境如何?
服务器必须具有私钥才能成功进行SSL握手。它还用相应的公钥(在证书中)介绍自己。如果该证书是由全球信任的CA签署的,则无需执行任何操作-证书将被信任。如果不是(自签名,专用CA),则必须将其添加到客户端信任存储区,以告知应用程序尽管没有公共权限保证,也应信任此特定证书。
如果导入解决了问题,我是否需要导入证书 在其他环境中,当我部署应用程序时?
必须告知每个系统它应该信任该特定证书。如果客户端应用程序是您专有的,则可以与其一起分发信任库。
对于信任库,我看到有人说信任我们自己。我们是什么 相信自己吗?
通过将给定证书添加到“信任列表”-信任存储。从字面上说,可以连接到使用该特定证书进行自我介绍的服务器(仍然必须具有私钥进行身份验证)
信任库是否使用任何证书?
信任存储只是一个容器。
我应该何时使用密钥库而不是信任库?
已经回答,但是-使用信任库来说使用某些公钥进行连接是安全的,尽管事实并非由全球CA签署。使用服务器端的密钥库可以进行正确的握手。