有一个服务器只发送它自己的证书,链中没有任何颁发者(注意:它不是自签名的)。
当我在 Google Chrome 中连接到此服务器并查看证书时,我会在“证书路径”选项卡中看到完整的链,但是当我尝试使用 Java 连接到此服务器并使用时,我-Djavax.net.debug=SSL只能看到服务器自己的证书。
我注意到该证书上有一个名为“权威信息访问”的扩展,其中有一个“备用名称”字段,其中的 URL 指向颁发者的证书。我相信 Chrome(或者 Windows 也许)“意识到”这个扩展,而 Java 不“意识到”,有没有办法在 Java 中使用这个扩展?(最好没有额外的类,但我意识到如果它不是内置的,可能没有简单的方法。)
如果我只将根证书添加到 Java 的 cacerts 中,那么我将无法执行 TLS 握手(因为服务器只发送自己的证书,而根证书没有颁发,而是中间证书颁发的)。该服务器不受我的控制,我无法让它发送中间证书。由于 Chrome 能够解析中间证书(我想是通过 AIA),我怀疑可能有一种方法可以在 Java 中执行此操作,而无需将中间证书添加到 cacerts 文件,仅添加根证书,但我不知道如何让 Java 使用此 AIA 扩展来获取中间证书。
您需要设置相关的系统属性以使您的Java应用程序能够下载根的中间证书。
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |