Java 6 似乎支持最高 v1.0 的 TLS,有没有办法在 Java 6 中使用 TLS 1.2? 也许 Java 6 的补丁或特定更新会支持它? 原文由 alex 发布,翻译遵循 CC BY-SA 4.0 许可协议
在使用 Oracle JDK 1.6 几个小时后,我能够在不更改任何代码的情况下使其工作。神奇的是 Bouncy Castle 处理 SSL 并允许 JDK 1.6 默认与 TLSv1.2 一起运行。理论上,它也可以通过最终调整应用于旧的 Java 版本。 从 Java Archive Oracle 网站 下载最新的 Java 1.6 版本 在您的首选路径上解压缩并设置您的 JAVA_HOME 环境变量 使用最新的 Java 加密扩展 (JCE) 无限强度管辖策略文件更新 JDK 6 下载 Bounce Castle jar 文件 bcprov-jdk15to18-1.72.jar 和 bctls-jdk15to18-1.72.jar 并将它们复制到您的 ${JAVA_HOME}/jre/lib/ext 文件夹中 修改文件 ${JAVA_HOME}/jre/lib/security/java.security 注释掉提供者部分并添加一些额外的行 # Original security providers (just comment it) # security.provider.1=sun.security.provider.Sun # security.provider.2=sun.security.rsa.SunRsaSign # security.provider.3=com.sun.net.ssl.internal.ssl.Provider # security.provider.4=com.sun.crypto.provider.SunJCE # security.provider.5=sun.security.jgss.SunProvider # security.provider.6=com.sun.security.sasl.Provider # security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI # security.provider.8=sun.security.smartcardio.SunPCSC # Add the Bouncy Castle security providers with higher priority security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider security.provider.2=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider # Original security providers with different priorities security.provider.3=sun.security.provider.Sun security.provider.4=sun.security.rsa.SunRsaSign security.provider.5=com.sun.net.ssl.internal.ssl.Provider security.provider.6=com.sun.crypto.provider.SunJCE security.provider.7=sun.security.jgss.SunProvider security.provider.8=com.sun.security.sasl.Provider security.provider.9=org.jcp.xml.dsig.internal.dom.XMLDSigRI security.provider.10=sun.security.smartcardio.SunPCSC # Here we are changing the default SSLSocketFactory implementation ssl.SocketFactory.provider=org.bouncycastle.jsse.provider.SSLSocketFactoryImpl 为了确保它正常工作,让我们制作一个简单的 Java 程序,使用 https 从一个 URL 下载文件。 import java.io.*; import java.net.*; public class DownloadWithHttps { public static void main(String[] args) { try { URL url = new URL(args[0]); System.out.println("File to Download: " + url); String filename = url.getFile(); File f = new File(filename); System.out.println("Output File: " + f.getName()); BufferedInputStream in = new BufferedInputStream(url.openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f.getName()); int bytesRead; byte dataBuffer[] = new byte[1024]; while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) { fileOutputStream.write(dataBuffer, 0, bytesRead); } fileOutputStream.close(); } catch (Exception ex) { ex.printStackTrace(); } } } 现在,只需编译 DownloadWithHttps.java 程序并使用您的 Java 1.6 执行它 ${JAVA_HOME}/bin/javac DownloadWithHttps.java ${JAVA_HOME}/bin/java DownloadWithHttps https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.10/commons-lang3-3.10.jar Windows 用户的重要说明:此解决方案已在 Linux 操作系统中测试,如果您使用的是 Windows,请将 ${JAVA_HOME} 替换为 --- %JAVA_HOME% 。 原文由 Wellington Souza 发布,翻译遵循 CC BY-SA 4.0 许可协议
在使用 Oracle JDK 1.6 几个小时后,我能够在不更改任何代码的情况下使其工作。神奇的是 Bouncy Castle 处理 SSL 并允许 JDK 1.6 默认与 TLSv1.2 一起运行。理论上,它也可以通过最终调整应用于旧的 Java 版本。
${JAVA_HOME}/jre/lib/ext
文件夹中${JAVA_HOME}/jre/lib/security/java.security
注释掉提供者部分并添加一些额外的行为了确保它正常工作,让我们制作一个简单的 Java 程序,使用 https 从一个 URL 下载文件。
现在,只需编译 DownloadWithHttps.java 程序并使用您的 Java 1.6 执行它
Windows 用户的重要说明:此解决方案已在 Linux 操作系统中测试,如果您使用的是 Windows,请将
${JAVA_HOME}
替换为 ---%JAVA_HOME%
。