web-dev-qa-db-fra.com

Comment activer TLS 1.2 pour un appel API dans une application ASP.NET 2.0?

Notre site Web ASP.NET 2.0 traite les transactions par carte de crédit via des appels à l'API Authorize.Net. Authorize nous a informés qu’à une date précise, notre client doit utilise le protocole TLS 1.2 pour les appels API. 

Microsoft semblait indiquer qu'une solution était disponible dans cet article 10-22-16 Ko: https://support.Microsoft.com/en-us/help/3154517/support-for-tls-system-default-versions -inclus-dans-le-.net-framework-2.0-sp2-sur-windows-vista-sp2-and-server-2008-sp2

... nous avons ajouté l'énumération SslProtocolsExtensions que vous pouvez utiliser comme option pour configurer TLS v1.2, TLS v1.1, ainsi que pour utiliser Paramètres système par défaut de la propriété ServicePointManager.SecurityProtocol lorsque vous ciblez .NET Framework version 2.0 SP2.

Notez que, malgré le titre de cet article, la citation ci-dessus fait not référence aux systèmes d'exploitation Windows Vista SP2 ou Windows 2008 SP2, car ces systèmes d'exploitation ne prennent pas en charge TLS v1.1 et 1.2.

J'ai implémenté et testé ma compréhension de la solution indiquée dans l'article de la base de connaissances en procédant comme suit:

  1. Activation de TLS 1.2 sur notre serveur Web Windows Server 2008 R2 (et confirmation via ssllabs.com).
  2. Confirmé que SP2 était en fait installé pour .NET Framework version 2.0.
  3. Ajout des deux fichiers source indiqués dans l'article de base de connaissances référencé à notre projet (à savoir, SecurityProtocolTypeExtensions.cs et SslProtocolsExtensions.cs)
  4. Entrez la ligne de code suivante (de l'article de la base de connaissances) dans le projet situé juste au-dessus de l'appel de l'API: System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12;

Malheureusement, lors de l'exécution de l'application, l'erreur suivante apparaît sur la ligne de code indiquée dans l'élément n ° 3 ci-dessus: 

System.NotSupportedException: le protocole de sécurité demandé n'est pas prise en charge.

À ce stade, je suis perplexe. J'apprécierais tout particulièrement les informations sur la manière d'aller de l'avant avec cette solution, mais je souhaiterais en savoir plus sur toute autre approche dont vous avez connaissance pour permettre à un appel API d'une application ASP.NET 2.0 d'utiliser TLS 1.2. (La mise à niveau vers une version plus récente du framework .NET est un dernier recours.)

Merci d'avance pour votre aide!

7
cjo30080

Nous avons dû migrer vers TLS 1.2 avec notre application .NET 2.0 et nous ne voulions pas porter le code vers .NET 4.5/4.6. Après quelques jours de recherche et après être tombé sur cet article, nous avons trouvé la solution. Cet article fait référence au mauvais HOTFIX. Pour que TLS 1.2 fonctionne avec .NET 2.0 sur Server 2008 R2, vous avez besoin de ce correctif: https://support.Microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions inclus-dans-le-cadre-net

Il fait référence au framework 3.5.1 mais travaille également pour le framework 2.0. Une fois le correctif installé, vous pouvez apporter des modifications au registre sur le serveur, comme indiqué OR, à modifier le code de votre application pour référencer directement TLS 1.2.

C # ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072;

VB ServicePointManager.SecurityProtocol = DirectCast (3072, System.Net.SecurityProtocolType)

Pour les autres systèmes d’exploitation, consultez le post de Troy Starr ici: https://community.qualys.com/thread/16917-net-framework

J'espère que cela t'aides

9
JoeBoxer

Pour tous ceux qui trouvaient ce fil de discussion, j’étais capable de faire fonctionner TLS 1.2 sur .Net 3.5 en suivant les mêmes étapes (n ° 1 à n ° 4) décrites dans la question initiale ci-dessus. Une fois que j'ai appliqué le correctif sur le serveur Win 2012 (que mon hébergeur partagé était assez gentil pour appliquer), puis que j'avais ajouté la ligne de code permettant d'activer TLS 1.2 avant l'appel de mon API, cela fonctionnait immédiatement:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12;
5
B-Rad

Je me rends compte que cette question est un peu ancienne - mais pour l’aide des autres cela a fonctionné pour nous - et nos transactions Authorize.Net fonctionnent maintenant avec TLS 1.2 sur notre application .NET 2.0 AbleCommerce. [Il semble que le délai de transition pour la production ait été prolongé jusqu'au 28 février 2018]

Environnement: Windows Server 2008 R2, IIS 7.5, AbleCommerce 7.0.2 version 11659, CommerceBuilder.AuthorizeNet 7.0.9764.0

Selon la réponse de @ JoeBoxer ci-dessus, ce lien a fait le bon choix - en définissant spécifiquement les deux clés de registre pour notre système x64 (le correctif indiqué ne serait pas installé sur notre machine):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001 

Nous avions également ceci - car nous n'avions pas les entrées pour TLS 1.2 - mais cela seul n'a pas résolu le problème.

1
rktect