最近,我尝试通过java访问HTTPS网站。我遇到一个关于SSL的错误说
无法找到所请求目标的有效证书路径
我尝试检查我的信任存储和根证书,并且还安装了由根CA签名的中间CA.唯一不存在的是用于签署网站证书的中间CA.
我尝试安装中间CA并使这些东西工作。我想知道,为什么有必要安装中间CA?如果没有将它安装到我的信任商店,它是不是从某个地方获得了它?
答案 0 :(得分:3)
为什么需要安装中间CA?
因为HTTPS Web服务器配置错误。
假设发送证书链,最多但不包括根证书。
配置网络服务器的人没有这样做,所以如果您没有在本地安装链,那么链中就会缺少链接。
正确的解决方案是让Web服务器管理员正确配置服务器。解决方法就是您已经完成的工作,即在本地安装缺少的中间证书,因此Java可以验证完整的链。
答案 1 :(得分:1)
中间证书是信任库中的证书与服务器上发布的证书之间的一个(或多个)。您从中获得SSL证书的CA本应为您提供(通常是'cabundle'文件)。这需要安装在服务器上。
对于Apache,您需要在旧版本中指定SSLCertificateChainFile
,或者在2.4及更高版本中将cabundle文件的内容附加到证书文件中。
对于Nginx,您需要将cabundle文件的内容附加到证书文件中。
要使SSL验证,需要整个信任链有效,例如
Root CA (in your browser) -> Intermediate Certificates (if any) -> Your certificate
如果缺少中间证书,则客户端无法验证证书是否有效。
答案 2 :(得分:0)
中级证书是服务器证书的直接签名者。因此,为了创建信任链,客户端会根据自签名的根证书验证证书。
如果服务器没有发送中间证书以及主域证书,浏览器将开始抛出错误声明"证书颁发机构无效"因为它期望签署域证书但只获得域证书的中间证书。