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);
    }
}

然后,在 ApplicationonCreate() 方法中调用:

@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();
        }
    }
}

然后在 ApplicationonCreate() 里调用:

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 🚀。

posted @ 2025-02-12 16:04  Greg_LYU  阅读(232)  评论(0)    收藏  举报