Android 用 HttpClient スタックと SSL/TLS 実装セレクター
HttpClient スタックと SSL/TLS 実装セレクターは、Xamarin.Android アプリで使用される HttpClient と SSL/TLS の実装を決定します。
プロジェクトは System.Net.Http アセンブリを参照する必要があります。
警告
2018 年 4 月 – PCI コンプライアンスを含むセキュリティ要件の増加により、主要なクラウド プロバイダーと Web サーバーは、1.2 より古いバージョンの TLS のサポートを停止する予定です。 以前のバージョンのVisual Studioで作成された Xamarin プロジェクトでは、既定で古いバージョンの TLS が使用されます。
アプリがこれらのサーバーとサービスで引き続き動作するようにするには、次に示す設定で Xamarin プロジェクトをAndroid HttpClientNative TLS 1.2更新してから、アプリをビルドし直してユーザーに再展開する必要があります。
Xamarin.Android HttpClient の構成は、Project オプション>の Android オプションで、[詳細オプション] ボタンをクリックします。
TLS 1.2 サポートに推奨される設定は次のとおりです。
代替構成オプション
AndroidClientHandler
AndroidClientHandler は、マネージド コードにすべてを実装するのではなく、ネイティブ Java/OS コードに委任する新しいハンドラーです。 このオプションを選択することをお勧めします。
長所
- パフォーマンスを向上させ、実行可能ファイルのサイズを小さくするために、ネイティブ API を使用します。
- 最新の標準のサポート(例: TLS 1.2。
短所
- Android 4.1 以降が必要です。
- 一部の HttpClient 機能/オプションは使用できません。
マネージド (HttpClientHandler)
マネージド ハンドラーは、以前の Xamarin.Android バージョンに付属しているフル マネージド HttpClient ハンドラーです。
長所
- これは、MS .NET および古い Xamarin バージョンと最も互換性のある (機能) です。
短所
- OS と完全に統合されていません (たとえば、TLS 1.0 に制限)。
- 通常、ネイティブ API よりもはるかに低速です (暗号化など)。
- より多くのマネージド コードが必要であり、より大きなアプリケーションが作成されます。
ハンドラーの選択
アプリケーションの AndroidClientHandler ニーズに応じて選択できます HttpClientHandler 。 AndroidClientHandler は、最新のセキュリティ サポートに推奨されます。
- TLS 1.2 以降のサポートが必要です。
- アプリが Android 4.1 (API 16) 以降を対象としています。
- に対する TLS 1.2 以降のサポートが
HttpClient必要です。 - TLS 1.2 以降の
WebClientサポートは必要ありません。
HttpClientHandler は、TLS 1.2 以降のサポートが必要ですが、Android 4.1 より前のバージョンの Android をサポートする必要がある場合に適しています。 TLS 1.2 以降のサポートが必要な場合にも適しています WebClient。
Xamarin.Android 8.3 以降では、 HttpClientHandler 基になる TLS プロバイダーとして、既定で Boring SSL (btls) が使用されます。 ボーリング SSL TLS プロバイダーには、次の利点があります。
- TLS 1.2 以降をサポートしています。
- すべての Android バージョンがサポートされています。
- TLS 1.2 以降の両方
HttpClientとWebClient.
下げる TLS プロバイダーとして Boring SSL を使用する欠点は、結果として得られる APK のサイズを大きくできることです (サポートされている ABI あたり約 1 MB の追加 APK サイズが追加されます)。
Xamarin.Android 8.3 以降、既定の TLS プロバイダーは Boring SSL (btls) です。 Boring SSL を使用しない場合は、プロパティを設定 $(AndroidTlsProvider) してマネージド SSL の実装履歴に legacy 戻すことができます (ビルド プロパティの設定の詳細については、「 ビルド プロセス」を参照してください)。
プログラムで使用する AndroidClientHandler
これは Xamarin.Android.Net.AndroidClientHandler 、 HttpMessageHandler Xamarin.Android 専用の実装です。
このクラスのインスタンスは、すべての HTTP 接続にネイティブ java.net.URLConnection 実装を使用します。 これにより、理論的には HTTP パフォーマンスが向上し、APK サイズが小さくなります。
このコード スニペットは、クラスの 1 つのインスタンスに対して明示的に実行する HttpClient 方法の例です。
// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());
注意
基になる Android デバイスでは、TLS 1.2 (つまり、TLS 1.2) がサポートされている必要があります。Android 4.1 以降)。 TLS 1.2 の公式サポートは Android 5.0 以降にあります。 ただし、一部のデバイスでは Android 4.1 以降で TLS 1.2 がサポートされています。
SSL/TLS 実装ビルド オプション
このプロジェクト オプションは、すべての Web 要求で使用される基になる TLS ライブラリを制御します。両方 HttpClient とも WebRequest. 既定では、TLS 1.2 が選択されています。
次に例を示します。
var client = new HttpClient();
HttpClient 実装が マネージド に設定され、TLS 実装が ネイティブ TLS 1.2 以降に設定されている場合、 client オブジェクトは自動的にマネージド HttpClientHandler TLS 1.2 (BoringSSL ライブラリによって提供される) を HTTP 要求に使用します。
ただし、 HttpClient 実装 が設定 AndroidHttpClientされている場合、すべての HttpClient オブジェクトは基になる Java クラス java.net.URLConnection を使用し、 TLS/SSL 実装 値の影響を受けません。 WebRequest オブジェクトは、BoringSSL ライブラリを使用します。
SSL/TLS 構成を制御するその他の方法
Xamarin.Android アプリケーションで TLS 設定を制御するには、次の 3 つの方法があります。
- Project オプションで HttpClient 実装と既定の TLS ライブラリを選択します。
- プログラム的に使用します
Xamarin.Android.Net.AndroidClientHandler。 - 環境変数を宣言します (省略可能)。
3 つの選択肢のうち、Xamarin.Android プロジェクト オプションを使用して、アプリ全体の既定 HttpMessageHandler と TLS を宣言することをお勧めします。 その後、必要に応じて、プログラムでオブジェクトを Xamarin.Android.Net.AndroidClientHandler インスタンス化します。 これらのオプションについては、上で説明します。
環境変数を使用する 3 番目のオプションを以下に説明します。
環境変数を宣言する
Xamarin.Android での TLS の使用に関連する 2 つの環境変数があります。
XA_HTTP_CLIENT_HANDLER_TYPE– この環境変数は、アプリケーションが使用する既定値HttpMessageHandlerを宣言します。 次に例を示します。XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandlerXA_TLS_PROVIDER– この環境変数は、どの TLS ライブラリを使用するか 、btlslegacyまたはdefault(この変数を省略した場合と同じ) を宣言します。XA_TLS_PROVIDER=btls
この環境変数は、 プロジェクトに環境ファイル を追加することによって設定されます。 環境ファイルは、 AndroidEnvironment のビルド アクションを持つ Unix 形式のプレーン テキスト ファイルです。
環境変数と Xamarin.Android の詳細については、Xamarin.Android 環境 ガイドを参照してください。





