.Net Framework 4.6.1 défaut TLS 1.2
Nos clients ont récemment mise à niveau de la sécurité du protocole TLS 1.2. Par conséquent, Nous avons mis à jour notre application pour 4.6.1 attend le protocole de sécurité, seront par défaut pour le protocole TLS 1.2, mais il ne l'est pas. Aucune idée pourquoi?
Comment savez-vous qu'il ne l'est pas? Qu'avez-vous essayer?
TLS 1.2 fonctionne dans 4.6.2, par défaut, à l'aide de HttpClient pour récupérer Google.com page d'accueil (TLS1.2) fonctionne sans problèmes
Nous sommes d'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 lors de l'ajout de cette ligne dans la méthode de démarrage de la Global.asax fichier résolu ce problème. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; Mais nous voulons savoir pourquoi nous avons besoin si nous avons notre application .Net 4.6.1
Ce erreur? Quel est le code? Je ne peux pas reproduire quoi que ce soit avec une application de console de ciblage 4.6.1. Si le certificat c'est faux, vous recevrez un message d'erreur avec aucun client, y compris les navigateurs.
Pas de repro avec une application de console de ciblage 4.6.1 sur Windows 10, l'appel d'une page web qui n'accepte TLS1.2 avec HttpClient. En fait, si j'ai force TLS1.1-je obtenir
TLS 1.2 fonctionne dans 4.6.2, par défaut, à l'aide de HttpClient pour récupérer Google.com page d'accueil (TLS1.2) fonctionne sans problèmes
Nous sommes d'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 lors de l'ajout de cette ligne dans la méthode de démarrage de la Global.asax fichier résolu ce problème. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; Mais nous voulons savoir pourquoi nous avons besoin si nous avons notre application .Net 4.6.1
Ce erreur? Quel est le code? Je ne peux pas reproduire quoi que ce soit avec une application de console de ciblage 4.6.1. Si le certificat c'est faux, vous recevrez un message d'erreur avec aucun client, y compris les navigateurs.
Pas de repro avec une application de console de ciblage 4.6.1 sur Windows 10, l'appel d'une page web qui n'accepte TLS1.2 avec HttpClient. En fait, si j'ai force TLS1.1-je obtenir
The request was aborted: Could not create SSL/TLS secure channel.
.OriginalL'auteur Harihara Iyer | 2017-05-09
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire et c'est ce qui a fonctionné pour moi.
Powershell ouverte et vérifier les protocoles pris en charge par l'aide de
[Net.ServicePointManager]::SecurityProtocol
Exécuter les opérations suivantes à 2 applets de commande pour définir .NET Framework cryptographie forte clés de registre:
ensemble de la cryptographie forte sur 64 bits .Net Framework (version 4 et ci-dessus)
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
ensemble de la cryptographie forte sur 32 bits .Net Framework (version 4 et ci-dessus)
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Redémarrer Powershell et vérifier de nouveau que le protocole pris en charge par l'aide de
[Net.ServicePointManager]::SecurityProtocol
Il devrait maintenant afficher
Tls12
.Espère que cette aide
A fonctionné pour moi - Merci! Par ailleurs, si le temps, s'il vous plaît ajouter une barre oblique inverse entre Microsoft et .NetFramework pour les autres: "Set-ItemProperty -Chemin 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' Nom 'SchUseStrongCrypto' Valeur '1' de Type DWord" .. les Deux commandes sont également les mêmes. Peut-être une remarque pourrait être faite à cet effet. Merci encore.
Merci pour les commentaires. Le 64-bit devrait également inclure la Wow6432node clé. Répare.
Mes deux dernières modifications n'ont pas été acceptées, mais vous pouvez voir la clé de registre correcte des valeurs dans ma réponse ci-dessous.
+1, a résolu notre problème, nous avions des choses à 4.6 et le problème était toujours là, probablement parce que le défaut n'est pas là jusqu'à 4.7. quelques autres articles sur le web mentionné la mise à jour à 4,6 fixe, pas pour nous. merci pour la rapidité powershell correctif. +1 +1 +1
OriginalL'auteur Kartik Gupta
La raison pour laquelle le protocole de sécurité n'a pas de valeur par défaut pour le protocole TLS 1.2 est parce qu'il n'existe pas de valeur par défaut pour cette .NET Framework 4.6.1. Désolé si c'est répétant ce qui a déjà été dit, mais je tenais à préciser et je n'ai pas assez de réputation pour commentaire.
Il n'existe pas de valeur par défaut dans 4.6.2 soit, cependant, comme un des intervenants mentionnés ci-dessus, une application de console ne semblent par défaut pour le protocole TLS 1.2. J'ai essayé exactement le même code dans un projet de site web de ciblage 4.6.2 et il n'a PAS de valeur par défaut pour le protocole TLS 1.2.
4.7 et ci-dessus n'ont qu'une valeur par défaut de SecurityProtocolType.SystemDefault.
"Cela permet .NET Framework Api de réseau basé sur SslStream (tels que FTP, HTTP et SMTP) pour hériter de la valeur par défaut des protocoles de sécurité de l'exploitation du système ou à partir d'une configuration personnalisée effectuée par un administrateur système"
https://docs.microsoft.com/en-us/dotnet/api/system.net.servicepointmanager.securityprotocol?view=netframework-4.7#System_Net_ServicePointManager_SecurityProtocol
OriginalL'auteur Gabe
Comme d'autres l'ont mentionné, il existe un certain nombre de clés de Registre de Windows, qui doit être défini pour activer TLS 1.2 existant .NET applications sans définition explicite de la version du protocole dans le code de l'application.
Afin de rendre .NET 4.x code de sélectionner les meilleurs protocole 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 32 bits et les versions 64 bits de Windows:
HKLM\SOFTWARE\Microsoft\.NETFramework\4.0.30319\SchUseStrongCrypto: 0X00000001
Sur les versions 64 bits de Windows:
HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\4.0.30319\SchUseStrongCrypto: 0X00000001
La WOW6432Node valeur est nécessaire pour activer TLS 1.2 dans les applications 32 bits sur les systèmes 64 bits.
Mais voici la solution rapide et facile:
https://github.com/TheLevelUp/pos-tls-patcher
Mise à jour:
Si vous êtes à cibler .NET 4.6 ou 4.7 vous serez intéressé par Transport Layer Security (TLS) les meilleures pratiques avec les .NET Framework.
Noter que TLS Patcher lien ci-dessus beaucoup suit la recommandation de Microsoft pour les .NET 4.0 et 4.5 applications qui ne peuvent cible .NET 4.6 ou supérieur.
Je ressens votre douleur. Je ne sais pas pourquoi cette info n'est pas documentée mieux. Nous essayons de faire passer le mot: blog.thelevelup.com/pci-security-is-your-restaurant-ready
aussi, si vous voulez TLS 1.2 en code natif vous avez aussi besoin de Schannel clés de registre set: docs.microsoft.com/en-us/windows-server/security/tls/...
OriginalL'auteur user24601
Prises de ici
Comment est-ce répondre à la question? L'OP dit que TLS1.2 ne fonctionne pas quand il doit
Je comprends la question "je n'ai rien fait et devrait TLS 1.2 travaillé"
Le réponse n'est pas pertinent. Le commentaire peut-être, si elle a été accompagnée d'une référence. Dans 4.6.2 TLS1.2 est activé par défaut
J'ai mis à jour la cité de MSDN passage
OriginalL'auteur Camille G.
J'ai affronté le problème de trop. Lors de l'application locale a essayé de se connecter à un serveur qui prend en charge TLS 1.1 et TLS 1.2 il a utilisé pour obtenir "Une connexion existante a dû être fermée par l'hôte distant" exception
ou lorsque TLS 1.1/1.2 n'ont pas été correctement activé auparavant c'était "Win32Exception: le client et Le serveur ne peut pas communiquer, parce qu'ils ne possèdent pas une commune de l'algorithme de"
Ci-dessous il y a toutes les clés de registre et les valeurs qui sont nécessaires pour x64 de windows OS.
Si vous avez des 32 bits du système d'exploitation (x86) il suffit de retirer les 2 dernières lignes.
TLS 1.0 sera désactivé par le script de registre.
Le redémarrage de système d'exploitation est nécessaire.
OriginalL'auteur Mikhail Titov
Je l'utilise dans mon code sur la page initiale. L'application est de formulaires web dans VB.NET avec .NET Framework 4.6.1
S'il vous plaît ne pas coder en dur le protocole de sécurité dans le code de l'application. Vous voulez suivre les recommandations figurant dans les réponses ci-dessus, qui sont également en ligne avec Microsoft TLS Meilleures Pratiques .NET
Impair. J'ai eu un code de base a commencé dans le Framework 3.5, qui a partagé une dll à partir d'un site web et une .exe. La dll, site web, et .exe ont été mis à niveau vers Cadre 4.6.2. L' .exe a bien fonctionné et utilisé TLS 1.2. Le site web n'a pas. J'ai eu à désigner clairement la version de protocole par ce post pour obtenir le site web de travail.
OriginalL'auteur Glada