Android 9 证书信任安装指南

在开发和使用 Android 应用时,建立安全的 HTTPS 连接至关重要。为了确保应用能够信任特定的 SSL 证书,我们需要在 Android 9 及以上版本中进行相应的配置。本文将介绍如何在 Android 9 中安装证书信任,以及示例代码。

证书信任机制

在 Android 9 及以上版本中,尤其是针对安全性考虑,Google 对 SSL 证书的处理做了一定的调整。应用无法像以前那样轻易地信任任何证书,必须显式地进行配置。我们可以通过以下步骤实现证书的信任安装。

  1. 获取证书:你需要从可信的证书颁发机构获得 SSL 证书,保存为 .crt 文件。
  2. 将证书添加到应用:将证书文件添加到你的 Android 项目的 res/raw 目录下。

代码示例

在此示例中,我们将通过 OkHttp 库建立 HTTPS 连接,并信任我们添加的自定义证书。

首先,确保在项目的 build.gradle 文件中已经添加了 OkHttp 的依赖:

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}

接下来,我们可以使用以下代码来实现证书信任:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.CertificatePinner;
import java.io.IOException;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.io.InputStream;

public class HttpsClient {
    private OkHttpClient client;

    public HttpsClient(Context context) throws Exception {
        InputStream caInput = context.getResources().openRawResource(R.raw.your_certificate);
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        Certificate ca;
        try {
            ca = cf.generateCertificate(caInput);
        } finally {
            caInput.close();
        }

        // 建立自定义证书的 TrustManager
        final CertificatePinner certificatePinner = new CertificatePinner.Builder()
                .add("your.server.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
                .build();

        client = new OkHttpClient.Builder()
                .certificatePinner(certificatePinner)
                .build();
    }

    public String get(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();
        
        Response response = client.newCall(request).execute();
        return response.body().string();
    }
}

在上面的代码中,我们加载了证书,并使用 CertificatePinner 配置了网络请求中的证书检查。这将确保只有与指定证书匹配的服务器能够进行 HTTPS 连接。

证书信任过程示意图

以下是证书信任过程的序列图,展示了用户安装证书及系统验证连接的过程。

sequenceDiagram
    participant User
    participant App
    participant CertificateAuthority as CA
    participant Server

    User->>App: 选择安装证书
    App->>CA: 请求验证证书
    CA-->>App: 返回验证结果
    App->>Server: 发起HTTPS请求
    Server-->>App: 返回数据

小结

本文介绍了如何在 Android 9 中安装并信任自定义证书,以确保应用与服务器之间的安全通信。通过添加证书并使用 OkHttp 进行 HTTPS 请求,你可以有效防范中间人攻击和其他安全隐患。随着 Android 平台对安全性的不断增强,了解这些配置也将为开发者提供更高的安全保障。希望这篇文章能帮助你在项目中成功实施证书信任机制。