当我们需要通过HTTPS调用内部域时,Java不允许它,因为它不识别那些域web服务器发送的证书(可能是因为这些证书是自签名的,因为这些域是组织内部的)。
在这种情况下,我们被要求导入这些证书。但是,cacert位置不是仅用于存储根证书而不是自签名证书吗?我的意思是,一般的过程是证书颁发者的CA证书位于cacert中,然后使用证书颁发者的公钥对签名进行验证。当接收到自签名证书时,是否更改了处理?
还是我必须成为自己的证书颁发机构,这可能需要生成一个新的密钥对,然后用我的私钥对自签名证书进行签名,创建包含我的公钥的CA证书,然后在cacerts中安装该证书?
发布于 2020-06-04 16:59:30
我想你有点困惑。自签名证书可以是根证书。当您通过HTTPS调用您的内部域时,为了使TLS握手成功(因此,为了在HTTPS上进行通信),您的本地服务需要信任服务器的CA。出于这个原因,您将该CA导入到信任存储中,从而信任CA将签名的ID证书。ID证书是服务器在TLS握手过程中将呈现的证书。如果需要进一步澄清,请告诉我。被X509弄糊涂是最容易做的事情:)
发布于 2020-06-04 21:09:12
根据Java文档的说法,cacerts.jks是“信任商店”的名字。
信任存储不一定只存储证书颁发机构的证书。这是你信任的所有证书。
Truststore文件cacerts.jks包含Application的受信任证书,包括其他实体的公钥。对于受信任的证书,服务器已确认证书中的公钥属于证书的所有者。受信任证书通常包括证书颁发机构(CA)的证书。
由您决定是否使用内部CA。但是无论如何,您可以在cacerts存储中安装您信任的证书。
发布于 2020-06-06 02:12:23
所有根证书都是自签名的。
确定证书是否可以用于签署另一个证书的是basic constraints字段。有关更多信息,请参见https://stackoverflow.com/questions/21319841/signing-certificate-with-another-certificate-signed-by-ca。
https://security.stackexchange.com/questions/232723
复制相似问题