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 지원에 권장되는 설정은 다음과 같습니다.
대체 구성 옵션
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) 이상을 대상으로 합니다.
- 에 대한
HttpClient
TLS 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 버전을 지원합니다.
- 둘 다
HttpClient
에WebClient
대해 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 설정을 제어할 수 있는 세 가지 방법이 있습니다.
- 프로젝트 옵션에서 HttpClient 구현 및 기본 TLS 라이브러리를 선택합니다.
- 프로그래밍 방식으로 .
Xamarin.Android.Net.AndroidClientHandler
- 환경 변수를 선언합니다(선택 사항).
세 가지 선택 사항 중에서 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
– 이 환경 변수는 사용할btls
legacy
TLS 라이브러리를 선언합니다default
(이 변수를 생략하는 것과 동일).XA_TLS_PROVIDER=btls
이 환경 변수는 프로젝트에 환경 파일을 추가하여 설정합니다. 환경 파일은 AndroidEnvironment의 빌드 작업이 있는 Unix 형식의 일반 텍스트 파일입니다.
환경 변수 및 Xamarin.Android에 대한 자세한 내용은 Xamarin.Android 환경 가이드를 참조하세요.