Android 如何启用对TSLV1.2 和 TSLV1.3 的支持
Android 4.4 启用 TLS 1.3(使用 Google Conscrypt)
Conscrypt 是 Google 维护的一个更现代的 TLS 实现,支持 TLS 1.2 和 TLS 1.3,并且兼容 Android 4.4。你可以使用它来为 OkHttp、Netty 或其他 SSL/TLS 相关功能提供支持。
步骤 1:添加 Google Conscrypt 依赖
在 build.gradle
(Module 级别)添加:
implementation 'org.conscrypt:conscrypt-android:2.5.2'
注意:
2.5.2
版本是较新的稳定版本,可支持 TLS 1.3。
步骤 2:在应用启动时启用 TLS 1.3
你需要在 Application
类中初始化 Conscrypt 并强制启用 TLS 1.3:
import org.conscrypt.Conscrypt;
import java.security.Security;
public class TLSInitializer {
public static void enableTLS13() {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
}
}
然后,在 Application
的 onCreate()
方法中调用:
@Override
public void onCreate() {
super.onCreate();
TLSInitializer.enableTLS13();
}
步骤 3:验证 TLS 1.3 是否启用
你可以通过以下代码检查是否启用了 TLS 1.3:
import javax.net.ssl.SSLContext;
public class TLSCheck {
public static void checkTLS() {
try {
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
sslContext.init(null, null, null);
System.out.println("✅ TLS 1.3 已启用");
} catch (Exception e) {
System.out.println("❌ TLS 1.3 不支持");
e.printStackTrace();
}
}
}
然后在 Application
的 onCreate()
里调用:
TLSCheck.checkTLS();
步骤 4:在 OkHttp/Netty 里使用 TLS 1.3
如果你使用 OkHttp:
import okhttp3.OkHttpClient;
import org.conscrypt.Conscrypt;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.X509TrustManager;
import java.security.Security;
public class OkHttpTLS13 {
public static OkHttpClient getTLS13Client() {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
try {
// 创建 TLS 1.3 的 SSLSocketFactory
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
sslContext.init(null, null, null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
return new OkHttpClient.Builder()
.sslSocketFactory(sslSocketFactory, (X509TrustManager) getTrustManager())
.build();
} catch (Exception e) {
throw new RuntimeException("TLS 1.3 初始化失败", e);
}
}
private static TrustManager getTrustManager() throws Exception {
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
return trustManagerFactory.getTrustManagers()[0];
}
}
使用方式
OkHttpClient client = OkHttpTLS13.getTLS13Client();
如果你使用 Netty:
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import org.conscrypt.Conscrypt;
import javax.net.ssl.SSLException;
import java.security.Security;
public class NettyTLS13 {
public static SslContext getTLS13SslContext() throws SSLException {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
return SslContextBuilder.forClient()
.protocols("TLSv1.3")
.build();
}
}
使用方式
SslContext sslContext = NettyTLS13.getTLS13SslContext();
总结
方法 | 适用情况 | 兼容性 | 代码复杂度 |
---|---|---|---|
Conscrypt 启用 TLS 1.3(推荐) | 适用于所有网络库 | ✅ Android 4.4+ | ✅ 简单 |
OkHttp 手动设置 TLS 1.3 | 仅适用于 OkHttp | ✅ Android 4.4+ | ⚠️ 需要额外代码 |
Netty 手动设置 TLS 1.3 | 仅适用于 Netty | ✅ Android 4.4+ | ⚠️ 需要额外代码 |
如果你想全局启用 TLS 1.3,建议直接使用 Conscrypt
,这样所有的网络请求(包括 OkHttp、Netty、Retrofit)都会自动支持 TLS 1.3 🚀。