Android용 HttpClient Stack 및 SSL/TLS 구현 선택기

HttpClient Stack 및 SSL/TLS 구현 선택기는 Xamarin.Android 앱에서 사용할 HttpClient 및 SSL/TLS 구현을 결정합니다.

프로젝트는 System.Net.Http 어셈블리를 참조해야 합니다.

Warning

2018 년 4월 – PCI 규정 준수를 비롯한 보안 요구 사항 증가로 인해 주요 클라우드 공급자 및 웹 서버는 1.2보다 오래된 TLS 버전 지원을 중지할 것으로 예상됩니다. 이전 버전의 Visual Studio에서 만든 Xamarin 프로젝트는 기본적으로 이전 버전의 TLS를 사용합니다.

앱이 이러한 서버 및 서비스에서 계속 작동하도록 하려면 아래에 표시된 설정과 Native TLS 1.2 함께 Android HttpClient Xamarin 프로젝트를 업데이트한 다음, 앱을 다시 빌드하고 사용자에게 다시 배포해야 합니다.

Xamarin.Android HttpClient 구성은 프로젝트 옵션 > Android 옵션있으며 고급 옵션 단추를 클릭합니다.

TLS 1.2 지원에 권장되는 설정은 다음과 같습니다.

Visual Studio Android Options

대체 구성 옵션

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) 이상을 대상으로 합니다.
  • 에 대한 HttpClientTLS 1.2 이상 지원이 필요합니다.
  • TLS 1.2 이상 지원 WebClient은 필요하지 않습니다.

HttpClientHandler 는 TLS 1.2 이상 지원이 필요하지만 Android 4.1 이전 버전의 Android를 지원해야 하는 경우에 적합합니다. TLS 1.2 이상 지원이 필요한 경우에도 적합합니다 WebClient.

Xamarin.Android 8.3 HttpClientHandler 부터 기본 TLS 공급자로 기본값은 보링 SSL(btls)입니다. 지루한 SSL TLS 공급자는 다음과 같은 이점을 제공합니다.

  • TLS 1.2+를 지원합니다.
  • 모든 Android 버전을 지원합니다.
  • 둘 다 HttpClientWebClient대해 TLS 1.2+ 지원을 제공합니다.

지루한 SSL을 언더링 TLS 공급자로 사용하는 단점은 결과 APK의 크기를 늘릴 수 있다는 것입니다(지원되는 ABI당 약 1MB의 추가 APK 크기 추가).

Xamarin.Android 8.3부터 기본 TLS 공급자는 지루한 SSL(btls)입니다. Boring SSL을 사용하지 않으려면 속성을 로 설정 $(AndroidTlsProvider) 하여 기록 관리되는 SSL 구현에 legacy 되돌리기 수 있습니다(빌드 속성 설정에 대한 자세한 내용은 빌드 프로세스 참조).

프로그래밍 방식으로 사용 AndroidClientHandler

HttpMessageHandler Xamarin.Android Xamarin.Android.Net.AndroidClientHandler 에 대한 구현입니다. 이 클래스의 인스턴스는 모든 HTTP 연결에 대해 네이티브 java.net.URLConnection 구현을 사용합니다. 이렇게 하면 이론적으로 HTTP 성능이 향상되고 APK 크기가 작아질 것입니다.

이 코드 조각은 클래스의 단일 인스턴스에 대해 명시적으로 사용하는 방법의 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(예: Android 4.1 이상). TLS 1.2에 대한 공식 지원은 Android 5.0 이상입니다. 그러나 일부 디바이스는 Android 4.1 이상에서 TLS 1.2를 지원합니다.

SSL/TLS 구현 빌드 옵션

이 프로젝트 옵션은 모든 웹 요청 HttpClient 에서 사용할 기본 TLS 라이브러리를 제어합니다 WebRequest. 기본적으로 TLS 1.2가 선택됩니다.

예시:

var client = new HttpClient();

HttpClient 구현이 관리형으로 설정되고 TLS 구현이 네이티브 TLS 1.2 이상client으로 설정된 경우 개체는 HTTP 요청에 대해 관리 HttpClientHandler 형 및 TLS 1.2(BoringSSL 라이브러리에서 제공)를 자동으로 사용합니다.

그러나 HttpClient 구현이 설정된 AndroidHttpClient경우 모든 HttpClient 개체는 기본 Java 클래스 java.net.URLConnection 를 사용하며 TLS/SSL 구현 값의 영향을 받지 않습니다. WebRequest 개체는 BoringSSL 라이브러리를 사용합니다.

SSL/TLS 구성을 제어하는 다른 방법

Xamarin.Android 애플리케이션에서 TLS 설정을 제어할 수 있는 세 가지 방법이 있습니다.

  1. 프로젝트 옵션에서 HttpClient 구현 및 기본 TLS 라이브러리를 선택합니다.
  2. 프로그래밍 방식으로 .Xamarin.Android.Net.AndroidClientHandler
  3. 환경 변수를 선언합니다(선택 사항).

세 가지 선택 사항 중에서 Xamarin.Android 프로젝트 옵션을 사용하여 전체 앱에 대한 기본값 HttpMessageHandler 및 TLS를 선언하는 것이 좋습니다. 그런 다음 필요한 경우 프로그래밍 방식으로 개체를 인스턴스화합니다 Xamarin.Android.Net.AndroidClientHandler . 이러한 옵션은 위에서 설명합니다.

세 번째 옵션인 환경 변수 사용은 아래에 설명되어 있습니다.

환경 변수 선언

Xamarin.Android에서 TLS 사용과 관련된 두 가지 환경 변수가 있습니다.

  • XA_HTTP_CLIENT_HANDLER_TYPE – 이 환경 변수는 애플리케이션에서 사용할 기본값 HttpMessageHandler 을 선언합니다. 예시:

    XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
    
  • XA_TLS_PROVIDER– 이 환경 변수는 사용할 btlslegacyTLS 라이브러리를 선언합니다 default (이 변수를 생략하는 것과 동일).

    XA_TLS_PROVIDER=btls
    

이 환경 변수는 프로젝트에 환경 파일을 추가하여 설정합니다. 환경 파일은 AndroidEnvironment의 빌드 작업이 있는 Unix 형식의 일반 텍스트 파일입니다.

환경 변수 및 Xamarin.Android에 대한 자세한 내용은 Xamarin.Android 환경 가이드를 참조하세요.