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