OpenJDK 8 (1.8.0_232) 和某些导致 HTTP 错误 403 的 HTTPS 连接是否存在任何已知问题?
Is there any known issue with OpenJDK 8 (1.8.0_232) and some HTTPS connections causing HTTP error 403?
当 运行ning Saxon 9.9.1.6 HE with Java 1.8.0_232 (java -version
outputs
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.232-b09, mixed mode)
) 和命令行 java -cp 'C:\Program Files\Saxonica\Saxon9.9HE\saxon9he.jar' net.sf.saxon.Query -t .\harry-potter-api-ex1.xq
到 运行 一个试图访问 https://www.potterapi.com/v1/sortingHat 的 XQuery 程序我总是得到一个错误 FOUT1170: Server returned HTTP response code: 403 for URL: https://www.potterapi.com/v1/sortingHat
.
运行 Java 12.0.1 (java -version
输出
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode)
) 在具有相同 Saxon 版本的同一台机器上,查询总是 works/is 能够进行 HTTPS 访问。
Java 8/1.8 是否存在任何可能导致此问题的已知问题?是否有人使用 Oracle JRE 1.8 遇到同样的错误?
XQuery 文件是
declare namespace map = "http://www.w3.org/2005/xpath-functions/map";
declare namespace array = "http://www.w3.org/2005/xpath-functions/array";
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method 'json';
declare option output:indent 'yes';
json-doc('https://www.potterapi.com/v1/sortingHat')
我已经用 Saxon 和 Java 8/1.8 测试了其他一些 HTTPS 连接,它们确实有效,但是对于给定的 URL 我总是得到 Java 8/ 的错误1.8 并且 Java 12.
没有错误
BaseX 也给了我 [FOUT1170] Resource 'https://www.potterapi.com/v1/sortingHat' cannot be retrieved.
当 运行 Java 8 和 运行s 查询很好 Java 12.
我现在也尝试了一些 Java 代码
System.out.println(System.getProperty("java.version"));
URL url = new URL("https://www.potterapi.com/v1/sortingHat");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
try {
con.connect();
System.out.println(con.getResponseCode());
}
finally {
con.disconnect();
}
输出为
1.8.0_232
403
对于 Java 1.8 和
12.0.1
200
知道是什么导致了 Java 1.8/8 的 403 吗?
这是证书/CA 信任问题。
如果您检查 https://www.potterapi.com/v1/sortingHat 的证书(例如,通过在浏览器中打开 url 并单击挂锁图标),您会发现它是由 COMODO ECC Domain Validation Secure Server CA 2
颁发的.
接下来,如果您检查 JEP 319: Root Certificates 的内容,您会发现 Comodo(和其他 CA)已作为 Java 10 的一部分添加到 OpenJDK。因此,由于较早的 Java 版本如 Java 8 在其证书链中没有 Comodo CA,服务器(本例中的 potterapi)将在 TLS 握手期间拒绝它并以 403 - Forbidden 响应。
当 运行ning Saxon 9.9.1.6 HE with Java 1.8.0_232 (java -version
outputs
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.232-b09, mixed mode)
) 和命令行 java -cp 'C:\Program Files\Saxonica\Saxon9.9HE\saxon9he.jar' net.sf.saxon.Query -t .\harry-potter-api-ex1.xq
到 运行 一个试图访问 https://www.potterapi.com/v1/sortingHat 的 XQuery 程序我总是得到一个错误 FOUT1170: Server returned HTTP response code: 403 for URL: https://www.potterapi.com/v1/sortingHat
.
运行 Java 12.0.1 (java -version
输出
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode)
) 在具有相同 Saxon 版本的同一台机器上,查询总是 works/is 能够进行 HTTPS 访问。
Java 8/1.8 是否存在任何可能导致此问题的已知问题?是否有人使用 Oracle JRE 1.8 遇到同样的错误?
XQuery 文件是
declare namespace map = "http://www.w3.org/2005/xpath-functions/map";
declare namespace array = "http://www.w3.org/2005/xpath-functions/array";
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method 'json';
declare option output:indent 'yes';
json-doc('https://www.potterapi.com/v1/sortingHat')
我已经用 Saxon 和 Java 8/1.8 测试了其他一些 HTTPS 连接,它们确实有效,但是对于给定的 URL 我总是得到 Java 8/ 的错误1.8 并且 Java 12.
没有错误BaseX 也给了我 [FOUT1170] Resource 'https://www.potterapi.com/v1/sortingHat' cannot be retrieved.
当 运行 Java 8 和 运行s 查询很好 Java 12.
我现在也尝试了一些 Java 代码
System.out.println(System.getProperty("java.version"));
URL url = new URL("https://www.potterapi.com/v1/sortingHat");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
try {
con.connect();
System.out.println(con.getResponseCode());
}
finally {
con.disconnect();
}
输出为
1.8.0_232
403
对于 Java 1.8 和
12.0.1
200
知道是什么导致了 Java 1.8/8 的 403 吗?
这是证书/CA 信任问题。
如果您检查 https://www.potterapi.com/v1/sortingHat 的证书(例如,通过在浏览器中打开 url 并单击挂锁图标),您会发现它是由 COMODO ECC Domain Validation Secure Server CA 2
颁发的.
接下来,如果您检查 JEP 319: Root Certificates 的内容,您会发现 Comodo(和其他 CA)已作为 Java 10 的一部分添加到 OpenJDK。因此,由于较早的 Java 版本如 Java 8 在其证书链中没有 Comodo CA,服务器(本例中的 potterapi)将在 TLS 握手期间拒绝它并以 403 - Forbidden 响应。