DatatheoremのTrustKitおよびTrustKit-Androidリポジトリを使用します
元のプラットフォームライブラリは以下にあります
[iOS] https://github.com/datatheorem/trustkit
[Android] https://github.com/datatheorem/trustkit-android
iOS | https://www.nuget.org/packages/datatheorem.trustkit.net.ios
Android | https://www.nuget.org/packages/datatheorem.trustkit.net.android
このライブラリの基本的なインターフェイスは、TrustKit拡張バージョンを備えたSystem.net.http.httpclientコンストラクターでhttpmessagehandlerをオーバーライドすることです。必要な依存関係サービスを使用してください。次の例では、組み込みのマウイ依存関係サービスを使用します。これにより、共有コードライブラリで必要なHTTPクライアントのプラットフォーム固有のHTTPメッセージハンドラーが構築されます。
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
iOSおよびAndroid定義のハンドラーは、必要に応じて追加の機能のためにさらに上書きすることができます - Subclass TrustkitiosclienthandlerまたはTrustkitandroidClienthandlerのみ、そしてクライアントにサブクラスの新しいインスタンスを注入します。それでも正しい初期化メソッドを呼び出す必要があります!
ピンセットの値を決定するのは難しい場合があります。これは、証明書科目の公開情報のSHA256ハッシュのベース64エンコードです。証明書をコンピューターに.cer形式でダウンロードした後[Chrome、Firefoxなどでこれを行うことができます]、端末のOpenSSLを使用してPINセット値を計算します({certificateName} .cerをダウンロードされた証明書の実際の名前と置き換えます)。
openssl x509 -in {certificateName}.cer -pubkey -noout
| openssl pkey -pubin -outform der
| openssl dgst -sha256 -binary
| openssl enc -base64
iOSの場合、元のTrustKitライブラリで説明されているように、info.plistにtrustkit構成をinfo.plistに配置して構成します。 Swizzlingがinfo.plistでオンになっていても、この実装ではスウィズリングを使用しません。 TrustKit httpmessagehandlerパラメーターを備えたHTTPClientsのみが、証明書のピン留め実装を使用します。
AppDelegateの完成方法では、必ず置いてください。
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
これにより、TrustKit iOSコードが初期化されます。
Androidの場合、TrustKit構成を通常のAndroidセキュリティ構成ファイル(Resources/XML/Network_Security_Config.xml)に配置して構成し、元のTrustKitライブラリで説明されている残りのドキュメントに従ってください。
MainActivityのOnCreate関数で、Put:
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
これにより、TrustKit Androidコードが初期化されます。
証明書のピン留めは、重要なモバイルセキュリティ手法です(https://owasp.org/www-community/controls/certificate_and_public_key_pinning)。アプリケーション開発者は、既知の証明書値(または証明書公開値)をアプリケーションに出荷できます。次に、TLSハンドシェイク中に、リモートサーバーとの安全なHTTPS接続を確立するために、この出荷された既知の値は、サーバーによって提示される値(パケットの復号化に使用されます)と比較されます。値が一致する場合、モバイルアプリケーション開発者は接続の継続を許可します。そうでない場合、開発者は接続を停止し、適切だと思われますが(ユーザーへの通知など)、障害を処理できます。
newer System.net.httpClient(https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient)クラスを使用して、正しいプラットフォームメッセージハンドラーを挿入することで、ネットワークサービスにネイティブプラットフォームを使用できます。これらのメッセージハンドラーは、ここにジョナサンがリストしているような圧縮やその他の最適化を可能にするためのさまざまな方法で拡張できます(http://jonathanpeppers.com/blog/improving-http-performance-in-xamarin-applications)。これらのハンドラーを拡張する1つの重要な方法、およびこのリポジトリの動機は、Datatheoremによるプラットフォームに依存するライブラリの実装を介してピン留めする証明書です。
このリポジトリの問題を維持および修正することにあなたの支援と関心を寄せてくれた皆さんに感謝します!