java - 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 从哪个商店类别中挑选证书?
请帮忙。
解决方案
当服务器只返回叶证书而不返回中间证书时,就会发生这种情况。TLS 客户端是否需要在信任库中有中间 CA?解释它实际上是服务器问题而不是客户端问题。遵循该建议,它解决了我的问题。
推荐阅读
- python - 跨产品 Python
- reactjs - 在已部署的 AWS 环境中使用 cookie 时出现 CORS 问题
- java - 通过在 constraintLayout 中编程来设置 imageView 的边距
- java - 如何在java中从一个类到另一个类访问一个变量
- python - Pandas:根据组内元素的相对索引在多索引数据框中创建列
- python - 如何使用 PyTorch 在预训练模型上添加新层?(给出了 Keras 示例。)
- reactjs - 如何获取 Laravel CSRF-token 以通过 React 中的 fetch post 请求发送它?
- image - 在实际的android设备上添加网络图像时出现套接字异常
- php - Symfony Finder:获取具有特定扩展名的所有文件以及特定目录中的所有目录
- sql - PostgresSQL \d 命令告诉不存在的表