Ubuntu 下的 OpenJDK 11 是否支持 TLSv1.3?
Is TLSv1.3 supported in OpenJDK 11 under Ubuntu?
在 Ubuntu 18.04
sudo apt install openjdk-11-source
导致不了解 TLSv1.3 的 ProtocolVersion.java
。
有什么办法可以纠正这个问题(没有限制性许可)?
似乎出于某种原因,Ubuntu 实际上在 openjdk-11-* 包下 Java 10。
更新
自 April 23rd 2019, Ubuntu (18.04 LTS and more recent editions) ships with a JRE/JDK version 11.0.3。因此,alamar 的原始答案已过时。
出于好奇,我写了一个小的 TLS v1.3 检查工具,它以编程方式检查目标 运行time 环境的 TLS v1.3 支持。这样一来,人们就可以快速发现发生了什么:
public class TLS13Checker {
public static void main(String[] args) {
SSLContext context = null;
try {
KeyStore keyStore = KeyStore.getInstance("pkcs12");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init(keyStore);
TrustManager[] trustAllCerts = trustManagerFactory.getTrustManagers();
context = SSLContext.getInstance("TLSv1.3");
context.init(null, trustAllCerts, new SecureRandom());
SSLParameters params = context.getSupportedSSLParameters();
String[] protocols = params.getProtocols();
System.out.println("Java version : " + System.getProperty("java.runtime.version"));
boolean supportsTLSv13 = false;
for (String protocol : protocols) {
if ("TLSv1.3".equals(protocol)) {
supportsTLSv13 = true;
break;
}
}
if(supportsTLSv13) {
System.out.println("JRE supports TLS v1.3!");
} else {
System.out.println("JRE does NOT support TLS v1.3!");
}
String[] suites = params.getCipherSuites();
System.out.println("A total of " + suites.length + " TLS cipher suites is supported.");
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
e.printStackTrace();
System.exit(42);
}
}
}
您可以简单地编译并 运行 它,输出将类似于我最近使用 OpenJDK 环境(在 MacOS 下)得到的输出:
Java version : 11.0.3+7
JRE supports TLS v1.3!
A total of 45 TLS cipher suites is supported.
此外,此列表概述了所有常规 JSSE Cipher Suite Names。它可能有助于参考或其他(实施)目的。
希望对您有所帮助。
在 Ubuntu 18.04
sudo apt install openjdk-11-source
导致不了解 TLSv1.3 的 ProtocolVersion.java
。
有什么办法可以纠正这个问题(没有限制性许可)?
似乎出于某种原因,Ubuntu 实际上在 openjdk-11-* 包下 Java 10。
更新
自 April 23rd 2019, Ubuntu (18.04 LTS and more recent editions) ships with a JRE/JDK version 11.0.3。因此,alamar 的原始答案已过时。
出于好奇,我写了一个小的 TLS v1.3 检查工具,它以编程方式检查目标 运行time 环境的 TLS v1.3 支持。这样一来,人们就可以快速发现发生了什么:
public class TLS13Checker {
public static void main(String[] args) {
SSLContext context = null;
try {
KeyStore keyStore = KeyStore.getInstance("pkcs12");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init(keyStore);
TrustManager[] trustAllCerts = trustManagerFactory.getTrustManagers();
context = SSLContext.getInstance("TLSv1.3");
context.init(null, trustAllCerts, new SecureRandom());
SSLParameters params = context.getSupportedSSLParameters();
String[] protocols = params.getProtocols();
System.out.println("Java version : " + System.getProperty("java.runtime.version"));
boolean supportsTLSv13 = false;
for (String protocol : protocols) {
if ("TLSv1.3".equals(protocol)) {
supportsTLSv13 = true;
break;
}
}
if(supportsTLSv13) {
System.out.println("JRE supports TLS v1.3!");
} else {
System.out.println("JRE does NOT support TLS v1.3!");
}
String[] suites = params.getCipherSuites();
System.out.println("A total of " + suites.length + " TLS cipher suites is supported.");
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
e.printStackTrace();
System.exit(42);
}
}
}
您可以简单地编译并 运行 它,输出将类似于我最近使用 OpenJDK 环境(在 MacOS 下)得到的输出:
Java version : 11.0.3+7
JRE supports TLS v1.3!
A total of 45 TLS cipher suites is supported.
此外,此列表概述了所有常规 JSSE Cipher Suite Names。它可能有助于参考或其他(实施)目的。
希望对您有所帮助。