使用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
該庫的基本界面是覆蓋System.net.http.httpclient構造器上的httpMessageHandler,並具有TrustKit Enharced版本。使用您想要的任何依賴項服務,以下示例使用內置的毛伊依關係服務。這為共享代碼庫中所需的任何HTTP客戶端構建了平台特定的HTTP消息處理程序。
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
可以根據需要進一步覆蓋iOS和Android定義的處理程序 - 只需sub -Class TrustKitiosClientHandler或TrustKitandroidClientHandler,然後將您的子類新實例注入客戶端。您仍然必須調用正確的初始化方法!
確定PIN集值可能很棘手:它是證書主題的公共密鑰信息的SHA256哈希的基本編碼。將以.cer格式下載到計算機的證書後[可以在Chrome,Firefox等上執行此操作],然後使用終端上的OpenSSL計算其PIN集值(替換{ceartialAteName} .cer使用下載證書的實際名稱)。
openssl x509 -in {certificateName}.cer -pubkey -noout
| openssl pkey -pubin -outform der
| openssl dgst -sha256 -binary
| openssl enc -base64
對於iOS,通過將TrustKit配置放置在Intoter.plist中,如原始TrustKit Library所述進行配置。即使在info.plist中打開了swizzling,它也不會在此實施中使用。只有具有TrustKit HTTPMessageHandler參數的HTTPCLIENT才能使用證書固定實現。
在AppDelegate的完成方法中,請務必放置:
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
這初始化了TrustKit iOS代碼。
對於Android,通過將TrustKit配置放置在普通的Android安全配置文件(Resources/XML/Network_security_config.xml)中,並確保按照原始TrustKit庫所述遵循其余文檔。
在MainAttivity的發電函數中,請說:
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
這初始化了TrustKit Android代碼。
證書固定是重要的移動安全技術(https://owasp.org/www-community/controls/certificate_and_public_key_pinning)。它允許應用程序開發人員及其應用程序運送已知證書值(或證書公共密鑰值)。然後,在TLS握手以與遠程服務器建立安全的HTTPS連接期間,將已發貨的已知值與服務器提出的值進行比較(將用於解密數據包)。如果值匹配,則移動應用程序開發人員允許連接繼續。如果不是這樣,開發人員可以停止連接並處理失敗,但認為適當(例如通知用戶)。
使用新的System.net.httpclient(https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient)類,並註入正確的平台消息處理程序,我們允許我們使用本機平台進行網絡服務。這些消息處理程序可以通過多種方式擴展,以允許壓縮和其他優化(例如Jonathan列表)(http://jonathanpeppers.com/blog/blog/improving-http-performance-in-performance-in-xamarin-applications)。擴展這些處理程序以及該存儲庫的動機的一種重要方法是證書通過datatheorem通過平台依賴庫實現固定。
感謝大家的幫助以及對維護和解決此存儲庫的問題的興趣!