Java 1.7哪个版本兼容TLS 1.2?无法升级至Java 1.8
在Java 1.7中启用TLS 1.2的解决方案
先确认JDK补丁版本
Java 1.7从update 131开始正式支持TLS 1.2,必须确保你的JDK是1.7u131及以上的补丁版本——旧的1.7版本没有完整的TLS 1.2支持,先把补丁更到对应版本(注意是Java 1.7的补丁升级,不是跳去Java 1.8)。用JVM参数全局开启TLS 1.2
启动应用时加下面的JVM参数,强制把TLS 1.2设为默认协议:-Dhttps.protocols=TLSv1.2
要是需要兼容TLSv1.1这类旧协议,改成:-Dhttps.protocols=TLSv1.1,TLSv1.2
另外还可以加这个参数强化SSL上下文配置:-Djdk.tls.client.protocols=TLSv1.2代码里手动指定TLS 1.2
如果全局参数没生效,或者只需要给特定连接配置,直接在代码里显式设置SSL上下文:
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import java.net.HttpURLConnection; import java.net.URL; // 初始化TLS 1.2上下文 SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, null, null); SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); // 把这个工厂用到你的HTTP连接上 HttpURLConnection connection = (HttpURLConnection) new URL("https://your-target-url.com").openConnection(); connection.setSSLSocketFactory(sslSocketFactory);
如果用的是Apache HttpClient,这么配置:
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import javax.net.ssl.SSLContext; SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, null, null); SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext); CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(sslSocketFactory).build();
- 关于Java 1.8崩溃的排查方向(可选)
如果之后想解决Java 1.8的崩溃问题,可以从这几点查:- 检查第三方依赖库,老旧库可能在Java 1.8下有字节码或API兼容问题
- 看崩溃日志里的具体报错,定位到异常类和方法,针对性修复
- 核对JVM启动参数,有些在Java 1.7里能用的参数到1.8有变化
内容的提问来源于stack exchange,提问作者Brandon Sifuentez
相关产品推荐
相关产品推荐

