Использование репозиториев 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
Основной интерфейс для этой библиотеки состоит в том, чтобы переопределить конструктор httpmessagehandler в системе. Net.http.httpclient с усовершенствованной версией TrustKit. Используйте любую службу зависимостей, которые вы хотите, в следующем примере используется встроенная служба зависимости Maui. Это создает специфический HTTP -обработчик сообщений HTTP для любых клиентов HTTP, необходимых в библиотеке общего кода.
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
Определенные iOS и Android обработчики могут быть дополнительно перезаписаны для дополнительной функциональности по желанию - просто подкласс TrustKiTiosclientHandler или TrustKitAndroidClientHandler, а затем внедрить новый экземпляр вашего подкласса в ваших клиентов. Вы все еще должны вызвать правильные методы инициализации!
Определение значений установки выводов может быть сложным: это базовая 64 -кодировка хэша SHA256 об открытом ключе информации о сертификате. После того, как вы загрузите сертификат в формате.
openssl x509 -in {certificateName}.cer -pubkey -noout
| openssl pkey -pubin -outform der
| openssl dgst -sha256 -binary
| openssl enc -base64
Для iOS настройка, поместив конфигурацию TrustKit в info.plist, как описано в оригинальной библиотеке TrustKit. Он не будет использовать Swizzling в этой реализации, даже если Swizzling включен в info.plist. Только httpclients с параметром TrustKit httpmessagehandler будут использовать реализацию закрепления сертификата.
В методе AppDelegate от FeltanChing, обязательно поместите:
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
Это инициализирует код iOS TrustKit.
Для Android настраивайте, поместив конфигурацию TrustKit в обычный файл конфигурации безопасности Android (ресурсы/xml/network_security_config.xml) и обязательно следуйте оставшейся документации, как описано в оригинальной библиотеке TrustKit.
В функции Oncreate MainActivity положите:
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
Это инициализирует код Android TrustKit.
Пиннинг сертификата является важной техникой мобильной безопасности (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) и инъекция правильной обработчики сообщений платформы позволяет нам использовать собственную платформу для сетевых сервисов. Эти обработчики сообщений могут быть расширены несколькими способами для обеспечения сжатия и других оптимизаций, таких как те, которые Джонатан перечисляет здесь (http://jonathanpeppers.com/blog/improving-http-performance-in-xamarin-applications). Одним из важных способов расширения этих обработчиков и мотивации этого репозитория является закрепление сертификата через платформу -зависимые библиотеки реализации библиотеки Datatheorem.
Спасибо всем вам за помощь и заинтересованность в поддержании и решении проблем с этим хранилищем!