我试图通过外行术语来理解信任商店和密钥库之间的区别.它们如何与java中的cacerts相关?我已经经历了很多线程,但仍然无法理解何时使用密钥库以及何时使用信任库.
当我尝试通过https对Web服务进行API调用时,我不断收到SSL证书问题. HTTPS服务使用的是自签名证书,我将证书导入到我的cacert,问题仍然存在.我在哪里导入此服务器证书?如果导入解决了问题,我在部署应用程序时是否需要在其他环境中导入证书?
我们的应用程序使用JKS文件,需要什么?当我查看JKS文件时,我看到其中有2个证书.我们为什么用它?
对于信任商店,我看到人们说信任自己.我们相信自己有什么?信任库是否使用任何证书?我什么时候应该使用密钥库而不是信任库?
理解这一点的任何帮助对我都非常有帮助.
解决方法:
Truststore – 一个容纳应该被接受的证书的容器,也就是应用程序所信任的.这可以是例如由CA权威机构签署的自签名证书或证书,该证书不在全局列表CA上.例如,公司可以拥有自己的CA以允许使用自己的证书.将此类CA添加到您的信任库(应用程序或在系统中安装)将验证CA签署的所有其他证书.
密钥库 – 包含私钥的容器.这允许应用程序接受使用相应公钥初始化的通信.
在Java中,它们可以是JKS格式,并且它们在技术上是“相同的”.出于安全原因,您将这些逻辑分成2个容器.
您可能不知道的是,PKI的工作原理是您始终拥有一对唯一的公钥和私钥.公钥用于ENCRYPT通信,而私钥用于解密它.当客户端通过SSL通道连接时,它使用公钥建立密钥交换.如果服务器身份是合法的,它将具有私钥并且能够继续进行交换.
现在回答你的问题
Where do I have to import this server certificate? If the import
solves the issues, do I need to import the certificate in other
environments when i deploy the application?
服务器必须具有私钥才能成功进行SSL握手.它还引入了相应的公钥(即证书).如果该证书由全球受信任的CA签署 – 则无需执行任何操作 – 证书将受到信任.如果不是(自签名,私有CA),则必须将其添加到客户端信任存储区,以告知应用程序尽管没有公共权限保证,但应该信任此特定证书.
If the import solves the issues, do I need to import the certificate
in other environments when i deploy the application?
必须告知每个系统它应该信任该特定证书.如果客户端应用程序是您的专有,您可以随身携带信任库.
For truststore, I see people saying trusting ourself. What are we
trusting ourself with?
通过将给定证书添加到“信任列表” – 信任存储.从字面上说,可以连接到引入自己特定证书的服务器(仍然必须有私钥来验证自己)
Do the truststore uses any certificates?
信任商店只是一个容器.
When should I be using a keystore versus a truststore?
已经回答了,但是 – 使用信任存储来说使用某些公钥进行连接是安全的,尽管它没有被全球CA签名.使用服务器端的密钥库允许进行正确的握手.