使用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通过平台依赖库实现固定。
感谢大家的帮助以及对维护和解决此存储库的问题的兴趣!