Android 용 HttpClient 스택 및 SSL/TLS 구현 선택기HttpClient Stack and SSL/TLS Implementation Selector for Android

HttpClient 스택 및 SSL/TLS 구현 선택기는 Xamarin Android 앱에서 사용 되는 HttpClient 및 SSL/TLS 구현을 결정 합니다.The HttpClient Stack and SSL/TLS Implementation selectors determine the HttpClient and SSL/TLS implementation that will be used by your Xamarin.Android apps.

프로젝트는 시스템 .net. Http 어셈블리를 참조 해야 합니다.Projects must reference the System.Net.Http assembly.

경고

4 월, 2018 – PCI 규정 준수를 포함 하 여 보안 요구 사항이 증가 함에 따라 주요 클라우드 공급자 및 웹 서버는 1.2 보다 오래 된 TLS 버전 지원을 중지 해야 합니다.April, 2018 – Due to increased security requirements, including PCI compliance, major cloud providers and web servers are expected to stop supporting TLS versions older than 1.2. 이전 버전의 Visual Studio에서 만든 Xamarin 프로젝트는 이전 버전의 TLS를 사용 합니다.Xamarin projects created in previous versions of Visual Studio default to use older versions of TLS.

앱이 이러한 서버 및 서비스와 함께 계속 작동 하도록 하려면 아래에 표시 된 Android HttpClientNative TLS 1.2 설정을 사용 하 여 Xamarin 프로젝트를 업데이트 한 후 사용자에 게 앱을 다시 빌드하고 다시 배포 해야 합니다.In order to ensure your apps continue to work with these servers and services, you should update your Xamarin projects with the Android HttpClient and Native TLS 1.2 settings shown below, then re-build and re-deploy your apps to your users.

Xamarin.ios HttpClient 구성은 Android 옵션 > 프로젝트 옵션에 있으며 고급 옵션 단추를 클릭 합니다.The Xamarin.Android HttpClient configuration is in Project Options > Android Options, then click the Advanced Options button.

다음은 TLS 1.2 지원에 권장 되는 설정입니다.These are the recommended settings for TLS 1.2 support:

Visual Studio Android 옵션Visual Studio Android Options

대체 구성 옵션Alternative configuration options

AndroidClientHandlerAndroidClientHandler

AndroidClientHandler는 관리 코드에서 모든 항목을 구현 하는 대신 네이티브 Java/OS 코드에 위임 하는 새 처리기입니다.AndroidClientHandler is the new handler that delegates to native Java/OS code instead of implementing everything in managed code. 이 옵션은 권장 되는 옵션입니다.This is the recommended option.

Pros

  • 더 나은 성능과 더 작은 실행 파일 크기를 위해 기본 API를 사용 합니다.Use native API for better performance and smaller executable size.
  • 최신 표준 (예:)에 대 한 지원Support for the latest standards, eg. TLS 1.2.TLS 1.2.

단점Cons

  • Android 4.1 이상이 필요 합니다.Requires Android 4.1 or later.
  • 일부 HttpClient 기능/옵션을 사용할 수 없습니다.Some HttpClient features/options are not available.

관리 됨 (HttpClientHandler)Managed (HttpClientHandler)

관리 되는 처리기는 이전 Xamarin Android 버전과 함께 제공 되는 완전히 관리 되는 HttpClient 처리기입니다.Managed handler is the fully managed HttpClient handler that has been shipped with previous Xamarin.Android versions.

Pros

  • MS .NET 및 이전 Xamarin 버전에서 가장 호환 되는 (기능)입니다.It is the most compatible (features) with MS .NET and older Xamarin versions.

단점Cons

  • OS와 완전히 통합 되지 않습니다 (예:It is not fully integrated with the OS (eg. TLS 1.0로 제한 됨).limited to TLS 1.0).
  • 일반적으로 훨씬 느립니다 (예:It is usually much slower (eg. 암호화)를 기본 API로 합니다.encryption) than native API.
  • 더 큰 응용 프로그램을 만드는 관리 코드가 더 필요 합니다.It requires more managed code, creating larger applications.

처리기 선택Choosing a Handler

AndroidClientHandlerHttpClientHandler 중에서 선택 하는 것은 응용 프로그램의 요구 사항에 따라 달라 집니다.The choice between AndroidClientHandler and HttpClientHandler depends upon the needs of your application. AndroidClientHandler은 최신 보안 지원 (예:)을 위해 권장 됩니다.AndroidClientHandler is recommended for the most up-to-date security support, eg.

  • TLS 1.2 이상 지원이 필요 합니다.You require TLS 1.2+ support.
  • 앱이 Android 4.1 (API 16) 이상을 대상으로 합니다.Your app is targeting Android 4.1 (API 16) or later.
  • HttpClient에 대 한 TLS 1.2 + 지원이 필요 합니다.You need TLS 1.2+ support for HttpClient.
  • WebClient에 대 한 TLS 1.2 + 지원이 필요 하지 않습니다.You don't need TLS 1.2+ support for WebClient.

HttpClientHandler는 TLS 1.2 이상 지원이 필요 하지만 Android 4.1 이전 버전의 Android를 지원 해야 하는 경우에 적합 합니다.HttpClientHandler is a good choice if you need TLS 1.2+ support but must support versions of Android earlier than Android 4.1. WebClient에 대 한 TLS 1.2 + 지원이 필요한 경우에도이 옵션을 선택 하는 것이 좋습니다.It is also a good choice if you need TLS 1.2+ support for WebClient.

Xamarin Android 8.3부터 HttpClientHandler 기본 TLS 공급자로btls(보링 SSL)로 기본값을 설정 합니다.Beginning with Xamarin.Android 8.3, HttpClientHandler defaults to Boring SSL (btls) as the underlying TLS provider. 보링 SSL TLS 공급자는 다음과 같은 이점을 제공 합니다.The Boring SSL TLS provider offers the following advantages:

  • TLS 1.2 +를 지원 합니다.It supports TLS 1.2+.
  • 모든 Android 버전을 지원 합니다.It supports all Android versions.
  • HttpClientWebClient에 대 한 TLS 1.2 + 지원 기능을 제공 합니다.It provides TLS 1.2+ support for both HttpClient and WebClient.

디스패처에 TLS 공급자로 보링 SSL을 사용할 경우의 단점은 결과 APK의 크기를 늘릴 수 있다는 것입니다 (지원 되는 ABI 당 추가 APK 크기의 1MB를 추가).The disadvantage of using Boring SSL as the underling TLS provider is that it can increase the size of the resulting APK (it adds about 1MB of additional APK size per supported ABI).

Xamarin Android 8.3부터 기본 TLS 공급자는 지루한 SSL (btls)입니다.Beginning with Xamarin.Android 8.3, the default TLS provider is Boring SSL (btls). 보링 SSL을 사용 하지 않으려면 $(AndroidTlsProvider) 속성을 legacy 설정 하 여 관리 되는 관리 SSL 구현으로 되돌릴 수 있습니다. 빌드 속성 설정에 대 한 자세한 내용은 빌드 프로세스를 참조 하세요.If you do not want to use Boring SSL, you can revert to the historical managed SSL implementation by setting the $(AndroidTlsProvider) property to legacy (for more information about setting build properties, see Build Process).

AndroidClientHandler를 사용 하 여 프로그래밍 방식으로Programatically Using AndroidClientHandler

Xamarin.Android.Net.AndroidClientHandler은 Xamarin.ios 전용 HttpMessageHandler 구현입니다.The Xamarin.Android.Net.AndroidClientHandler is an HttpMessageHandler implementation specifically for Xamarin.Android. 이 클래스의 인스턴스는 모든 HTTP 연결에 대 한 네이티브 java.net.URLConnection 구현을 사용 합니다.Instances of this class will use the native java.net.URLConnection implementation for all HTTP connections. 이를 통해 이론적으로 HTTP 성능과 더 작은 APK 크기가 증가 합니다.This will theoretically provide an increase in HTTP performance and smaller APK sizes.

이 코드 조각은 HttpClient 클래스의 단일 인스턴스에 대해를 명시적으로 수행 하는 방법의 예입니다.This code snippet is an example of how to explicitly for a single instance of the HttpClient class:

// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());

참고

기본 Android 장치는 TLS 1.2 (ie)를 지원 해야 합니다. Android 4.1 이상).The underlying Android device must support TLS 1.2 (ie. Android 4.1 and later). TLS 1.2에 대 한 공식적인 지원은 Android 5.0 이상에서 제공 됩니다.Please note that the official support for TLS 1.2 is in Android 5.0+. 그러나 일부 장치는 Android 4.1 이상에서 TLS 1.2를 지원 합니다.However some devices support TLS 1.2 in Android 4.1+.

SSL/TLS 구현 빌드 옵션SSL/TLS implementation build option

이 프로젝트 옵션은 HttpClientWebRequest모든 웹 요청에서 사용할 기본 TLS 라이브러리를 제어 합니다.This project option controls what underlying TLS library will be used by all web request, both HttpClient and WebRequest. 기본적으로 TLS 1.2는 다음과 같이 선택 됩니다.By default, TLS 1.2 is selected:

예를 들면,For example:

var client = new HttpClient();

HttpClient 구현을 관리 로 설정 하 고 Tls 구현이 Native TLS 1.2 + 로 설정 된 경우 client 개체는 관리 되는 HttpClientHandler 및 tls 1.2 (BoringSSL 라이브러리에서 제공)을 HTTP에 자동으로 사용 합니다. 요청과.If the HttpClient implementation was set to Managed and the TLS implementation was set to Native TLS 1.2+, then the client object would automatically use the managed HttpClientHandler and TLS 1.2 (provided by the BoringSSL library) for its HTTP requests.

그러나 Httpclient 구현이 AndroidHttpClient로 설정 된 경우 모든 HttpClient 개체는 기본 Java 클래스 java.net.URLConnection를 사용 하 고 TLS/SSL 구현 값의 영향을 받지 않습니다.However, if the HttpClient implementation is set to AndroidHttpClient, then all HttpClient objects will use the underlying Java class java.net.URLConnection and will be unaffected by the TLS/SSL implementation value. WebRequest 개체는 BoringSSL 라이브러리를 사용 합니다.WebRequest objects would use the BoringSSL library.

SSL/TLS 구성을 제어 하는 다른 방법Other ways to control SSL/TLS configuration

Xamarin Android 응용 프로그램에서 TLS 설정을 제어할 수 있는 방법에는 세 가지가 있습니다.There are three ways that a Xamarin.Android application can control the TLS settings:

  1. 프로젝트 옵션에서 HttpClient 구현 및 기본 TLS 라이브러리를 선택 합니다.Select the HttpClient implementation and default TLS library in the Project Options.
  2. Xamarin.Android.Net.AndroidClientHandler를 사용 하 여 프로그래밍 방식으로Programatically using Xamarin.Android.Net.AndroidClientHandler.
  3. 환경 변수를 선언 합니다 (선택 사항).Declare environment variables (optional).

세 가지 옵션 중 하나를 사용 하는 것이 좋습니다. Android 프로젝트 옵션을 사용 하 여 전체 앱에 대 한 기본 HttpMessageHandler 및 TLS를 선언 하는 것이 좋습니다.Of the three choices, the recommended approach is to use the Xamarin.Android project options to declare the default HttpMessageHandler and TLS for the entire app. 그런 다음 필요한 경우 Xamarin.Android.Net.AndroidClientHandler 개체를 프로그래밍 방식으로 인스턴스화합니다.Then, if necessary, programmatically instantiate Xamarin.Android.Net.AndroidClientHandler objects. 이러한 옵션은 위에 설명 되어 있습니다.These options are described above.

환경 변수 –를 사용 하 – 세 번째 옵션은 아래에 설명 되어 있습니다.The third option – using environment variables – is explained below.

환경 변수 선언Declare Environment Variables

Xamarin에서 TLS를 사용 하는 것과 관련 된 두 가지 환경 변수는 다음과 같습니다.There are two environment variables that are related to the use of TLS in Xamarin.Android:

  • 이 환경 변수 – XA_HTTP_CLIENT_HANDLER_TYPE 응용 프로그램에서 사용할 기본 HttpMessageHandler를 선언 합니다.XA_HTTP_CLIENT_HANDLER_TYPE – This environment variable declares the default HttpMessageHandler that the application will use. 예를 들면,For example:

    XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
    
  • 이 환경 변수 – XA_TLS_PROVIDER btls, legacy또는 default (이 변수를 생략 하는 것과 같음) 중 어떤 TLS 라이브러리가 사용 되는지 선언 합니다.XA_TLS_PROVIDER – This environment variable will declare which TLS library will be used, either btls, legacy, or default (which is the same as omitting this variable):

    XA_TLS_PROVIDER=btls
    

이 환경 변수는 프로젝트에 환경 파일 을 추가 하 여 설정 합니다.This environment variable is set by adding an environment file to the project. 환경 파일은 Androidenvironment의 빌드 작업을 사용 하는 Unix 형식의 일반 텍스트 파일입니다.An environment file is a Unix-formatted plain-text file with a build action of AndroidEnvironment:

환경 변수 및 Xamarin.ios에 대 한 자세한 내용은 Xamarin Android 환경 가이드를 참조 하세요.Please see the Xamarin.Android Environment guide for more details about environment variables and Xamarin.Android.