Comme d'autres l'ont mentionné, il existe un certain nombre de clés de registre Windows qui doivent être définies pour activer TLS 1.2 dans les applications .NET existantes sans définir explicitement la version du protocole dans le code de l'application.
Afin de faire Le code .NET 4.x sélectionne le protocole le plus puissant disponible. par défaut (c'est-à-dire lorsqu'un protocole n'est pas explicitement spécifié dans le code), les clés de registre suivantes sont nécessaires :
Sur les versions 32 et 64 bits de Windows : HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SchUseStrongCrypto: 0X00000001
Sur les versions 64 bits de Windows : HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319\SchUseStrongCrypto: 0X00000001
El WOW6432Node est nécessaire pour activer TLS 1.2 dans les applications 32 bits lorsqu'elles sont exécutées sur des systèmes 64 bits.
Mais voici la solution rapide et facile : https://github.com/TheLevelUp/pos-tls-patcher
Mise à jour :
Si vous ciblez .NET 4.6 ou 4.7, vous serez intéressé par les éléments suivants Meilleures pratiques en matière de sécurité de la couche de transport (TLS) avec le .NET Framework .
Notez que TLS Patcher Le lien ci-dessus suit de très près la recommandation de Microsoft pour les applications .NET 4.0 et 4.5 existantes qui ne peuvent pas cibler .NET 4.6 ou plus.
0 votes
Comment savez-vous que ça ne l'est pas ? Qu'avez-vous essayé ?
0 votes
TLS 1.2 fonctionne par défaut dans 4.6.2 - l'utilisation de HttpClient pour récupérer la page d'accueil de Google.com (TLS1.2) fonctionne sans problème.
1 votes
Nous obtenons cette erreur lors de la connexion au serveur "Cela pourrait être dû au fait que le certificat du serveur n'est pas configuré correctement avec HTTP.SYS dans le cas HTTPS". Cependant, l'ajout de cette ligne dans la méthode de démarrage du fichier Global.asax a permis de résoudre ce problème. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3 ; Mais nous voulons savoir pourquoi nous devons définir cela si notre application est en .Net 4.6.1.
0 votes
Quoi Une erreur ? Quel code ? Je ne peux rien reproduire avec une application console ciblant 4.6.1. Si le certificat est erronée, vous obtiendrez une erreur avec cualquier client, y compris les navigateurs.
0 votes
Aucun reproche avec une application console ciblant 4.6.1 sur Windows 10, appelant une page web qui n'accepte que TLS1.2 avec HttpClient. En fait, si je force TLS1.1 J'obtiens
The request was aborted: Could not create SSL/TLS secure channel.
.0 votes
Nous avons rencontré exactement le même problème pour nous connecter à l'API Salesforce, qui a récemment commencé à exiger TLS 1.2. Même avec .NET 4.6.1, nous obtenions toujours des connexions TLS 1.0 (qui étaient ensuite rejetées). Nous avons dû spécifier manuellement le ServicePointManager.SecurityProtocol, comme vous. Je soupçonne un problème avec la façon dont l'API Salesforce autonégocie la version TLS.
0 votes
Voir ma solution ici : stackoverflow.com/a/45442874/5785572