首页 > 解决方案 > Java 客户端未从 Windows 信任库中选择根/中间证书

问题描述

我有一个使用 SSL 证书运行的 Jetty 服务器,它具有 root->intermediate->host 证书链。

我在 Windows 上有一个连接到该服务器的 Java 客户端。我正在使用以下系统属性来设置信任存储,但除非我在 Windows“受信任的根证书颁发机构”存储中导入“主机”证书,否则它不起作用。我在 Windows 的“中间证书颁发机构”存储中有中间证书和根证书,但 Java 没有选择它们并引发 SSL 错误。但是,Chrome 可以完美运行而不会发出任何警告。

System.setProperty("javax.net.ssl.trustStore", "NUL");  
System.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");

据我了解,即使客户端计算机上有根证书或中间证书,Java 也应该能够选择它。
是否需要将中间体和根放在“受信任的根权限”商店下?放在“中间证书颁发机构”下不起作用吗?Java 从哪个商店类别中挑选证书?

请帮忙。

标签: javawindowssslssl-certificatejetty

解决方案


当服务器只返回叶证书而不返回中间证书时,就会发生这种情况。TLS 客户端是否需要在信任库中有中间 CA?解释它实际上是服务器问题而不是客户端问题。遵循该建议,它解决了我的问题。


推荐阅读