Utilisation des référentiels Trustkit et Trustkit-Android de Datatheorem
Les bibliothèques de plate-forme originales peuvent être trouvées ci-dessous
[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
L'interface de base de cette bibliothèque consiste à remplacer le HttpMessageHandler sur un constructeur System.net.http.httpClient avec une version améliorée Trustkit. Utilisez tout service de dépendance souhaité, l'exemple suivant utilise le service de dépendance Maui intégré. Cela construit le gestionnaire de messages HTTP spécifique à la plate-forme pour tous les clients HTTP nécessaires dans la bibliothèque de code partagée.
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
Les gestionnaires définis par iOS et Android peuvent être écrasés pour des fonctionnalités supplémentaires, comme vous le souhaitez - il suffit de sous-classe TrustKitioSlientHandler ou TrustKitAndroidClientHandler, puis injecter une nouvelle instance de votre sous-classe dans vos clients. Vous devez toujours appeler les méthodes d'initialisation correctes!
La détermination des valeurs d'ensemble de broches peut être délicate: c'est le codage de base 64 du hachage SHA256 des informations clés publiques du sujet du certificat. Après avoir téléchargé le certificat au format .Cer sur votre ordinateur [peut le faire sur Chrome, Firefox, etc.], calculez sa valeur de jeu de broches en utilisant OpenSSL sur le terminal (remplacer le {CertificaTename} .Cer par le nom réel du certificat téléchargé).
openssl x509 -in {certificateName}.cer -pubkey -noout
| openssl pkey -pubin -outform der
| openssl dgst -sha256 -binary
| openssl enc -base64
Pour iOS, configurez en plaçant la configuration Trustkit dans le Info.plist comme décrit par la bibliothèque Trustkit d'origine. Il n'utilisera pas Swizzling dans cette implémentation, même si Swizzling est activé dans le PLIST Info.plist. Seuls les HTTPClients avec le paramètre Trustkit HttpMessageHandler utiliseront l'implémentation d'épinglage du certificat.
Dans la méthode FinieLlaunch de l'AppDelegate, assurez-vous de mettre:
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
Cela initialise le code iOS Trustkit.
Pour Android, configurez en plaçant la configuration Trustkit dans le fichier de configuration de sécurité Android normal (Resources / XML / Network_Security_Config.xml) et assurez-vous de suivre la documentation restante comme décrit par la bibliothèque Trustkit originale.
Dans la fonction sur la mainactivité, put:
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
Cela initialise le code Android Trustkit.
L'épinglage du certificat est une technique de sécurité mobile importante (https://owasp.org/www-community/controls/certificate_and_public_key_pinning). Il permet aux développeurs d'application d'expédier une valeur de certificat connue (ou une valeur de clé publique de certificat) avec leur application. Ensuite, lors de la poignée de main TLS pour établir une connexion HTTPS sécurisée avec un serveur distant, cette valeur connue expédiée est comparée à la valeur présentée par le serveur (qui sera utilisée pour les paquets de décrétage). Si la valeur correspond, le développeur d'applications mobiles permet à la connexion de continuer. Si ce n'est pas le cas, le développeur peut arrêter la connexion et gérer l'échec, mais il juge approprié (comme la notification de l'utilisateur).
L'utilisation du nouveau système.net.httpclient (https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) et de l'injection des gestionnaires de messages de plate-forme corrects nous permettent d'utiliser la plate-forme native pour les services de réseau. Ces gestionnaires de messages peuvent être étendus de plusieurs façons pour permettre la compression et d'autres optimisations telles que celles que Jonathan énumère ici (http://jonathanpeppers.com/blog/improving-http-performance-in-xamarin-applications). Un moyen important d'étendre ces gestionnaires - et la motivation de ce référentiel - est le certificat épinglant via des implémentations de bibliothèque dépendantes de la plate-forme par Datatheorem.
Merci à tous pour votre aide et votre intérêt à maintenir et à résoudre les problèmes avec ce référentiel!