다음을 통해 공유


iOS/macOS용 HttpClient 및 SSL/TLS 구현 선택기

Xamarin.iOS, Xamarin.tvOS 및 Xamarin.Mac용 HttpClient 구현 선택기는 사용할 구현을 제어합니다HttpClient. iOS, tvOS 또는 macOS 네이티브 전송(NSUrlSession 또는 CFNetworkOS에 따라)을 사용하는 구현으로 전환할 수 있습니다. 단점은 TLS 1.2 지원, 더 작은 이진 파일 및 빠른 다운로드입니다. 단점은 비동기 작업을 실행하려면 이벤트 루프를 실행해야 한다는 것입니다.

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

Warning

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

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

HttpClient 스택 선택

앱에서 HttpClient 사용하는 내용을 조정하려면 다음을 수행합니다.

  1. 솔루션 탐색기 프로젝트 이름을 두 번 클릭하여 프로젝트 옵션을 엽니다.
  2. 프로젝트의 빌드 설정(예: Xamarin.iOS 앱용 iOS 빌드)으로 전환합니다.
  3. HttpClient 구현 드롭다운에서 형식을 HttpClient NSUrlSession(권장), CFNetwork 또는 관리형 중 하나로 선택합니다.

Choose HttpClient implementation from Managed, CFNetwork, or NSUrlSession

TLS 1.2 지원의 경우 이 NSUrlSession 옵션을 사용하는 것이 좋습니다.

NSUrlSession

NSURLSession기반 처리기는 iOS 7 이상에서 사용할 수 있는 네이티브 NSURLSession 프레임워크를 기반으로 합니다. 권장되는 설정입니다.

장점

  • 더 나은 성능과 더 작은 실행 파일 크기를 위해 네이티브 API를 사용합니다.
  • TLS 1.2와 같은 최신 표준을 지원합니다.

단점

  • iOS 7 이상이 필요합니다.
  • 일부 HttpClient 기능/옵션을 사용할 수 없습니다.

CFNetwork

CFNetwork기반 처리기는 iOS 6 이상에서 사용할 수 있는 네이티브 CFNetwork 프레임워크를 기반으로 합니다.

장점

  • 더 나은 성능과 더 작은 실행 파일 크기를 위해 네이티브 API를 사용합니다.
  • TLS 1.2와 같은 최신 표준에 대한 지원

단점

  • iOS 6 이상이 필요합니다.
  • watchOS에서는 사용할 수 없습니다.
  • 일부 HttpClient 기능/옵션을 사용할 수 없습니다.

관리형

관리되는 처리기는 이전 버전의 Xamarin과 함께 제공된 완전 관리형 HttpClient 처리기입니다.

장점

  • Microsoft .NET 및 이전 Xamarin 버전과 가장 호환되는 기능 집합이 있습니다.

단점

  • Apple OS와 완전히 통합되지 않으며 TLS 1.0으로 제한됩니다. 나중에 보안 웹 서버 또는 클라우드 서비스에 연결하지 못할 수 있습니다.
  • 일반적으로 네이티브 API보다 암호화와 같은 항목에서 훨씬 느립니다.
  • 더 많은 관리 코드가 필요하므로 더 큰 앱 배포 가능을 만듭니다.

프로그래밍 방식으로 HttpMessageHandler 설정

위에 표시된 프로젝트 전체 구성 외에도 다음 코드 조각에 설명된 대로 생성자를 통해 원하는 HttpMessageHandler 구성을 인스턴스화 HttpClient 하고 삽입할 수도 있습니다.

// This will use the default message handler for the application; as
// set in the Project Options for the project.
HttpClient client = new HttpClient();

// This will create an HttpClient that explicitly uses the CFNetworkHandler
HttpClient client = new HttpClient(new CFNetworkHandler());

// This will create an HttpClient that explicitly uses NSUrlSessionHandler
HttpClient client = new HttpClient(new NSUrlSessionHandler());

이렇게 하면 프로젝트 옵션 대화 상자에서 선언된 것과 다른 HttpMessageHandler 것을 사용할 수 있습니다.

SSL/TLS 구현

SSL(Secure Socket Layer)과 후속 TLS(전송 계층 보안)는 HTTP 및 기타 네트워크 연결을 통해 System.Net.Security.SslStream지원합니다. Xamarin.iOS, Xamarin.tvOS 또는 Xamarin.Mac의 System.Net.Security.SslStream 구현은 Mono에서 제공하는 관리되는 구현을 사용하는 대신 Apple의 네이티브 SSL/TLS 구현을 호출합니다. Apple의 네이티브 구현은 TLS 1.2를 지원합니다.

Warning

예정된 Xamarin.Mac 4.8 릴리스는 macOS 10.9 이상만 지원합니다. 이전 버전의 Xamarin.Mac은 macOS 10.7 이상을 지원했지만 이러한 이전 macOS 버전에는 TLS 1.2를 지원할 수 있는 TLS 인프라가 충분하지 않습니다. macOS 10.7 또는 macOS 10.8을 대상으로 하려면 Xamarin.Mac 4.6 또는 이전 버전을 사용하세요.

앱 전송 보안

Apple의 ATS(앱 전송 보안 )는 인터넷 리소스(예: 앱의 백 엔드 서버)와 앱 간에 보안 연결을 적용합니다. ATS를 사용하면 모든 인터넷 통신이 보안 연결 모범 사례를 준수하므로 앱 또는 사용하는 라이브러리를 통해 중요한 정보가 실수로 공개되지 않도록 방지할 수 있습니다.

ATS는 iOS 9, tvOS 9 및 OS X 10.11(El Capitan) 이상용으로 빌드된 앱에서 기본적으로 사용하도록 설정되므로 모든 연결을 사용 NSUrlConnectionCFUrl 하거나 NSUrlSession ATS 보안 요구 사항이 적용됩니다. 연결이 이러한 요구 사항을 충족하지 않으면 예외로 실패합니다.

HttpClient Stack 및 SSL/TLS 구현 선택에 따라 ATS에서 제대로 작동하려면 앱을 수정해야 할 수 있습니다.

ATS에 대한 자세한 내용은 앱 전송 보안 가이드를 참조하세요.

알려진 문제

이 섹션에서는 Xamarin.iOS에서 TLS 지원과 관련된 알려진 문제를 다룹니다.

"요청한 값 AppleTLS를 찾을 수 없습니다."라는 오류와 함께 프로젝트를 로드하지 못했습니다.

Xamarin.iOS 9.8에는 Xamarin.iOS 애플리케이션에 대한 .csproj 파일이 포함된 몇 가지 새로운 설정이 도입되었습니다. 이러한 변경으로 인해 이전 버전의 Xamarin.iOS에서 프로젝트를 열 때 문제가 발생할 수 있습니다. 다음 스크린샷은 이 시나리오에 표시될 수 있는 오류 메시지의 예입니다.

Screenshot of error while trying to load project, requested value legacy not found

이 오류는 Xamarin.iOS 9.8의 프로젝트 파일에 설정을 도입 MtouchTlsProvider 하여 발생합니다. Xamarin.iOS 9.8 이상으로 업데이트할 수 없는 경우 .csproj 파일 애플리케이션을 수동으로 편집하고 요소를 제거 MtouchTlsprovider 한 다음 변경된 프로젝트 파일을 저장하는 것이 좋습니다.

다음 코드 조각은 .csproj 파일 내에서 설정이 MtouchTlsProvider 어떻게 표시되는지 보여 주는 예입니다.

<MtouchTlsProvider>Default</MtouchTlsProvider>