Java 当服务器仅发送其证书且颁发者被授权信息访问引用时,使用TLS

Java 当服务器仅发送其证书且颁发者被授权信息访问引用时,使用TLS,java,ssl,Java,Ssl,有一个服务器只发送自己的证书,而链中没有一个颁发者(注意:它不是自签名的) 当我在Google Chrome中连接到此服务器并查看证书时,我会在“证书路径”选项卡中看到完整的链,但当我尝试使用Java连接到此服务器并使用-Djavax.net.debug=SSL时,我只会看到服务器自己的证书 我注意到这个证书上有一个扩展名为“Authority Info Access”,它有一个字段“Alternative Name”,URL指向颁发者的证书。我相信Chrome(或者Windows)已经“意识到

有一个服务器只发送自己的证书,而链中没有一个颁发者(注意:它不是自签名的)

当我在Google Chrome中连接到此服务器并查看证书时,我会在“证书路径”选项卡中看到完整的链,但当我尝试使用Java连接到此服务器并使用
-Djavax.net.debug=SSL
时,我只会看到服务器自己的证书

我注意到这个证书上有一个扩展名为“Authority Info Access”,它有一个字段“Alternative Name”,URL指向颁发者的证书。我相信Chrome(或者Windows)已经“意识到”了这个扩展,而Java并没有“意识到”,有没有办法在Java中使用这个扩展?(最好没有额外的类,但我意识到如果没有内置,可能没有简单的方法。)


如果我只将根证书添加到Java的cacerts中,那么我就无法执行TLS握手(因为服务器只发送自己的证书,而根证书没有颁发,中间证书颁发了)。此服务器不在我的控制范围内,我无法使其发送中间证书。由于Chrome能够解析中间证书(我想是通过AIA),我怀疑在Java中可能有一种方法可以做到这一点,而无需将中间证书添加到cacerts文件,只需根证书,但是我不知道如何让Java使用这个AIA扩展来获取中间证书。

您需要设置相关的系统属性,以使您的Java应用程序能够下载根用户的中间证书

System.setProperty("com.sun.security.enableAIAcaIssuers", "true");

服务器是否可公开访问?如果不是,请在问题中包含服务器证书好吗?@nandsito不是,它是一个内部服务器。感谢您的回答,很遗憾,我无法再访问相关服务器,因此我无法测试这是否有效。如果有人想让我知道,如果这不能解决他们的问题,我不会接受,我们可以进一步挖掘。