Datatheorem의 Trustkit 및 Trustkit-Android 저장소 사용
원래 플랫폼 라이브러리는 아래에서 찾을 수 있습니다
[ios] https://github.com/datatheorem/trustkit
[Android] https://github.com/datatheorem/trustkit-dreid
iOS | https://www.nuget.org/packages/datatheorem.trustkit.net.oiS
안드로이드 | https://www.nuget.org/packages/datatheorem.trustkit.net.android
이 라이브러리의 기본 인터페이스는 System.net.http.httpclient 생성자의 HttpMessageHandler를 TrustKit Enhanced 버전으로 무시하는 것입니다. 원하는 종속성 서비스를 사용하십시오. 다음 예제는 내장 된 Maui 의존성 서비스를 사용합니다. 이는 공유 코드 라이브러리에 필요한 모든 HTTP 클라이언트에 대한 플랫폼 특정 HTTP 메시지 처리기를 구축합니다.
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
iOS 및 Android 정의 핸들러는 원하는대로 추가 기능을 위해 추가로 작성할 수 있습니다. 서브 클래스 TrustKitiOSclientHandler 또는 TrustKitAndroidclientHandler 만 한 다음 서브 클래스의 새로운 인스턴스를 클라이언트에 주입합니다. 여전히 올바른 초기화 메소드를 호출해야합니다!
핀 세트 값을 결정하는 것은 까다로울 수 있습니다. 인증서 주제의 공개 키 정보의 SHA256 해시의 기본 64 인코딩입니다. 인증서를 .cer 형식으로 컴퓨터에 다운로드 한 후 [Chrome, Firefox 등에서이 작업을 수행 할 수 있습니다.] 터미널에서 OpenSSL을 사용하여 핀 세트 값을 계산하십시오 ({reateraleName} .cer를 다운로드 된 인증서의 실제 이름으로 바꾸십시오).
openssl x509 -in {certificateName}.cer -pubkey -noout
| openssl pkey -pubin -outform der
| openssl dgst -sha256 -binary
| openssl enc -base64
iOS의 경우 Original TrustKit 라이브러리에서 설명대로 info.plist에 TrustKit 구성을 배치하여 구성하십시오. Swizzling이 info.plist에서 켜져 있더라도이 구현에서 스위글링을 사용하지 않습니다. TrustKit HttpMessageHandler 매개 변수가있는 httpClients 만 인증서 고정 구현을 사용합니다.
AppDelegate의 완성 된 방법에서는 다음을 수행하십시오.
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
이것은 TrustKit iOS 코드를 초기화합니다.
Android의 경우 TrustKit 구성을 일반 Android 보안 구성 파일 (Resours/XML/Network_Security_Config.xml)에 배치하여 구성하고 Original Trustkit 라이브러리에서 설명한 나머지 문서를 따르십시오.
Mainactivity의 OnCreate 기능에서 다음 :
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
이것은 Trustkit Android 코드를 초기화합니다.
인증서 고정은 중요한 모바일 보안 기술입니다 (https://owasp.org/www-community/controls/certificate_and_public_key_pinning). 응용 프로그램 개발자는 신청서와 함께 알려진 인증서 값 (또는 인증서 공개 키 가치)을 배송 할 수 있습니다. 그런 다음 원격 서버와의 안전한 HTTPS 연결을 설정하기 위해 TLS 핸드 쉐이킹 중에,이 배송 된 알려진 값은 서버가 제시 한 값 (패킷을 해독하는 데 사용됨)과 비교됩니다. 값이 일치하면 모바일 애플리케이션 개발자가 연결을 계속할 수 있습니다. 그렇지 않은 경우, 개발자는 연결을 중지하고 실패를 처리 할 수 있지만 적절하다고 간주됩니다 (예 : 사용자 알림).
최신 System.net.httpclient (https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) 클래스를 사용하고 올바른 플랫폼 메시지 처리기를 주입하면 네트워크 서비스에 기본 플랫폼을 사용할 수 있습니다. 이 메시지 핸들러는 압축 및 Jonathan 목록과 같은 다른 최적화를 허용하는 여러 가지 방법으로 확장 될 수 있습니다 (http://jonathanpeppers.com/blog/improving-http-performance-in-xamarin-applications). 이러한 핸들러 와이 저장소의 동기를 확장하는 한 가지 중요한 방법은 Datatheorem의 플랫폼 종속 라이브러리 구현을 통해 인증서 고정입니다.
이 저장소의 문제 유지 및 수정에 대한 지원과 관심에 감사드립니다!