API <24 上的 Android 网络安全

问题描述

为了与我的 android 应用程序进行通信,我使用了 network-security-config.xml,它看起来像

<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
            <certificates src="system"/>
        </trust-anchors>
    </base-config>
</network-security-config>

my_ca 在哪里 - 证书(.pem 文件)

在 API

解决方法

声明式网络安全配置已在 Android 7 (API 24) 中添加。在此之前,您必须以编程方式进行。不幸的是,这并不简单,步骤是:

  • 将证书放入 KeyStore
  • 创建一个X509TrustManager
  • 创建一个SSLSocketFactory
  • 构建OkHttpClient
  • Retrofit 构建器中使用客户端

OkHttp recipe 描述了这一点。

似乎还有一个带有更简单 API 的 OkHttp extension :

val certificate = """-----BEGIN CERTIFICATE-----
...                
-----END CERTIFICATE
""".decodeCertificatePem()

val certificates: HandshakeCertificates = HandshakeCertificates.Builder()
    .addTrustedCertificate(certificate)
    .addPlatformTrustedCertificates()
    .build()

val client = OkHttpClient.Builder()
    .sslSocketFactory(certificates.sslSocketFactory(),certificates.trustManager)
    .build()

Retrofit.Builder()
    .client(client)
    ...
    .build()
    .create(MyWebService::class.java)

构建 OkHttp 客户端的类似示例 in java

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...