Android API <24 上的网络安全
Android Network Security on API <24
为了与我的 android 应用程序进行通信,我使用网络安全-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 < 24 时它不起作用,如何解决这个问题?
在 Android 7 (API 24) 中添加了声明性网络安全配置。在此之前,您必须以编程方式进行。不幸的是它并不简单,步骤是:
- 将证书放在
KeyStore
- 创建
X509TrustManager
- 创建
SSLSocketFactory
- 建立
OkHttpClient
- 在
Retrofit
构建器 中使用客户端
有 OkHttp recipe 描述了这一点。
似乎还有一个 OkHttp extension 更简单 API :
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
为了与我的 android 应用程序进行通信,我使用网络安全-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 < 24 时它不起作用,如何解决这个问题?
在 Android 7 (API 24) 中添加了声明性网络安全配置。在此之前,您必须以编程方式进行。不幸的是它并不简单,步骤是:
- 将证书放在
KeyStore
- 创建
X509TrustManager
- 创建
SSLSocketFactory
- 建立
OkHttpClient
- 在
Retrofit
构建器 中使用客户端
有 OkHttp recipe 描述了这一点。
似乎还有一个 OkHttp extension 更简单 API :
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