0

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 < 24 では動作しません。これを解決するにはどうすればよいですか?

4

1 に答える 1

1

宣言型ネットワーク セキュリティ構成は、Android 7 (API 24) で追加されました。その前に、プログラムでそれを行う必要があります。残念ながら、それは簡単ではありません。手順は次のとおりです。

  • 証明書をKeyStore
  • 作成するX509TrustManager
  • 作成するSSLSocketFactory
  • 構築するOkHttpClient
  • Retrofitビルダーでクライアントを使用する

これを説明するOkHttp レシピがあります。

はるかに単純な API を備えたOkHttp 拡張もあるようです。

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 クライアントを構築するJavaの同様のサンプル

于 2021-04-13T13:38:06.713 に答える