J'ai du mal à faire communiquer mon application Windows 8 avec mon API Web de test via SSL.
Il semble que HttpClient / HttpClientHandler ne fournit pas et l'option d'ignorer les certificats non approuvés comme WebRequest vous permet de (bien que d'une manière "hacky" avec ServerCertificateValidationCallback
).
Toute aide serait très appréciée!
c#
.net
windows-8
windows-runtime
Jamie
la source
la source
Réponses:
Avec Windows 8.1, vous pouvez désormais faire confiance aux certificats SSL non valides. Vous devez soit utiliser Windows.Web.HttpClient ou si vous souhaitez utiliser System.Net.Http.HttpClient, vous pouvez utiliser l'adaptateur de gestionnaire de messages que j'ai écrit: http://www.nuget.org/packages/WinRtHttpClientHandler
Les documents sont sur le GitHub: https://github.com/onovotny/WinRtHttpClientHandler
la source
Une solution rapide et sale consiste à utiliser le
ServicePointManager.ServerCertificateValidationCallback
délégué. Cela vous permet de fournir votre propre validation de certificat. La validation est appliquée globalement sur l'ensemble du domaine d'application.Je l'utilise principalement pour les tests unitaires dans les situations où je veux exécuter sur un point de terminaison que j'héberge en cours et que j'essaie de le frapper avec un client WCF ou le
HttpClient
.Pour le code de production, vous voudrez peut-être un contrôle plus fin et il serait préférable d'utiliser la propriété
WebRequestHandler
et saServerCertificateValidationCallback
propriété déléguée (voir la réponse de dtb ci-dessous ). Ou ctacke la réponse en utilisant leHttpClientHandler
. Je préfère l'un de ces deux maintenant, même avec mes tests d'intégration, à la façon dont je le faisais à moins que je ne trouve aucun autre crochet.la source
ServicePointManager.GetServicePoint(Uri)
(voir la documentation ) pour obtenir le point de service qui s'applique uniquement aux appels à cet URI. Vous pouvez ensuite définir les propriétés et gérer les événements en fonction de ce sous-ensemble.Jetez un œil à la classe WebRequestHandler et à sa propriété ServerCertificateValidationCallback :
la source
derived class
?HttpClientHandler
?Si vous essayez de le faire dans une bibliothèque .NET Standard, voici une solution simple, avec tous les risques de simplement retourner
true
dans votre gestionnaire. Je vous laisse la sécurité.la source
Ou vous pouvez utiliser pour HttpClient dans l'
Windows.Web.Http
espace de noms:la source
System.Net.Http
,System.Web
etWindows.Web.Http
ensemble?Si vous utilisez,
System.Net.Http.HttpClient
je pense que le modèle correct estla source
La plupart des réponses ici suggèrent d'utiliser le modèle typique:
en raison de l'interface IDisposable. Veuillez ne pas!
Microsoft vous explique pourquoi:
Et ici vous pouvez trouver une analyse détaillée de ce qui se passe dans les coulisses: https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
Concernant votre question SSL et basée sur https://docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/#how-to-fix-the-problem
Voici votre modèle:
la source
S'il s'agit d'une application Windows Runtime, vous devez ajouter le certificat auto-signé au projet et le référencer dans le fichier appxmanifest.
La documentation est ici: http://msdn.microsoft.com/en-us/library/windows/apps/hh465031.aspx
Même chose si elle provient d'une autorité de certification non approuvée (comme une autorité de certification privée à laquelle la machine elle-même ne fait pas confiance) - vous devez obtenir le certificat public de l'autorité de certification, l'ajouter en tant que contenu à l'application, puis l'ajouter au manifeste.
Une fois que cela est fait, l'application le verra comme un certificat correctement signé.
la source
Je n'ai pas de réponse, mais j'ai une alternative.
Si vous utilisez Fiddler2 pour surveiller le trafic ET activer le décryptage HTTPS, votre environnement de développement ne se plaindra pas. Cela ne fonctionnera pas sur les appareils WinRT, tels que Microsoft Surface, car vous ne pouvez pas y installer d'applications standard. Mais votre ordinateur de développement Win8 ira bien.
Pour activer le cryptage HTTPS dans Fiddler2, allez dans Outils> Options Fiddler> HTTPS (onglet)> Cochez "Décrypter le trafic HTTPS" .
Je vais garder un œil sur ce fil en espérant que quelqu'un ait une solution élégante.
la source
J'ai trouvé un exemple dans ce client Kubernetes où ils utilisaient X509VerificationFlags.AllowUnknownCertificateAuthority pour faire confiance aux certificats racine auto-signés auto-signés. J'ai légèrement retravaillé leur exemple pour travailler avec nos propres certificats racine encodés PEM. Espérons que cela aide quelqu'un.
la source
J'ai trouvé un exemple en ligne qui semble bien fonctionner:
Commencez par créer une nouvelle ICertificatePolicy
Ensuite, utilisez simplement ceci avant d'envoyer votre requête http comme ceci:
http://www.terminally-incoherent.com/blog/2008/05/05/send-a-https-post-request-with-c/
la source
ServicePointManager.CertificatePolicy
est obsolète: docs.microsoft.com/en-us/dotnet/framework/whats-new/…