0

我有 QuoVadis 签署的服务器证书。如果我使用浏览器访问我的服务器,一切都很好,但是如果我从 Java 应用程序或通过 NodeJS 脚本尝试它,我会收到无法验证我的证书路径的问题?

是什么原因?我的想法是,像 QuoVadis 或其他根 CA 等一些证书颁发机构都包含在 Java 等中,不是吗?

4

1 回答 1

1

...像 QuoVadis 或其他根 CA 等认证机构都包含在 Java 等中,不是吗?

对于 Java,它会有所不同。默认情况下, Oracle(以前的 Sun)构建的 Java 在作为 Java 的一部分安装的文件中使用自己的一组根 CA,JRE/lib/security/cacerts但可以修改此文件,并且 Java 进程 (JVM) 或程序可以覆盖默认值。OpenJDK各不相同;一些构建同样默认为 cacerts,而一些默认为他们使用的平台提供的证书存储,例如 Linux 或 MacOS。您没有说您使用什么 Java 和/或平台。

对于“等”,它的变化更大。NodeJS 使用 OpenSSL,它同样具有依赖于构建和/或平台的默认值。你没有提供细节或任何线索其他的东西(?)是什么。

但是,更有可能这根本不是根证书。所有公共 CA,包括 QuoVadis,颁发最终实体或“叶”证书,需要使用至少一个中间证书或“链证书”进行验证,有时甚至不止一个。(全部)TLS 标准要求服务器发送这个链证书(或这些证书)作为握手的一部分,我见过的每个 CA 都给出了使用哪个链证书的说明,例如在这种情况下https:// support.quovadisglobal.com/kb/a469/understanding-the-trust-link-downloads-page.aspx. 但是,由于许多服务器是由从不阅读或遵循说明的人操作的,因此大多数主流浏览器都有变通方法,即使服务器违反规则,它们也可以构建和验证证书链。Java 和 NodeJS/OpenSSL 客户端(以及其他客户端)不这样做,因此如果服务器无法发送正确的链,它们将无法通过验证。

如果这是一个公共 HTTPS服务器,https://www.ssllabs.com/ssltest会告诉你,除了(很多)关于 TLS 实现和配置的其他信息之外,服务器是否正在发送或丢失链证书. 对于其他服务器,还有其他工具,但我知道的那些需要用户的一些想法或知识。

于 2020-05-19T01:24:23.847 回答