Le client et le serveur ne peuvent pas communiquer, parce qu'ils ne possèdent pas un algorithme commun

j'ai un problème avec la passerelle c# PayTrace. Le code ci-dessous fonctionnait bien jusqu'à hier quand je crois qu'ils ont désactivé SSL3 à cause de L'Exploit de caniche. Lors de l'exécution du code ci-dessous nous avons reçu le message suivant. Le serveur distant a fortement fermé la connexion. Après avoir fait quelques recherches sur le problème, nous avons déterminé que parce que notre serveur IIS 7.5 était configuré pour toujours utiliser SSL3, C# a fait défaut à SSL3, PayTrace qui fermerait de force la connexion. Nous avons ensuite supprimé SSL3 à partir du serveur. Ce qui conduirait alors à l'erreur suivante:

le client et le serveur ne peuvent pas communiquer, car ils ne possèdent pas d'algorithme commun.

a mon avis, il y a d'autres algorithmes SSL que nous devons installer sur le serveur Maintenant que SSL 3 est supprimé. Notre personnel de la TI prétend que les normes TLS 1.1 et TLS 1.2 fonctionnent et que ASP.NET devrait être maintenant défaut à ceux. Mais je pense qu'il doit y avoir quelque chose d'autre que nous devons installer sur le serveur, Je ne connais pas les algorithmes SSL donc je ne sais pas par où commencer.

var postUrl = new StringBuilder();

//Initialize url with configuration and parameter values...
postUrl.AppendFormat("UN~{0}|", this.MerchantLoginID);
postUrl.AppendFormat("PSWD~{0}|", this.MerchantTransactionKey);
postUrl.Append("TERMS~Y|METHOD~ProcessTranx|TRANXTYPE~Sale|"); 
postUrl.AppendFormat("CC~{0}|", cardNumber);
postUrl.AppendFormat("EXPMNTH~{0}|", expirationMonth.PadLeft(2, '0'));
postUrl.AppendFormat("EXPYR~{0}|", expirationYear);
postUrl.AppendFormat("AMOUNT~{0}|", transactionAmount);
postUrl.AppendFormat("BADDRESS~{0}|", this.AddressLine1);
postUrl.AppendFormat("BADDRESS2~{0}|", this.AddressLine2);
postUrl.AppendFormat("BCITY~{0}|", this.City);
postUrl.AppendFormat("BSTATE~{0}|", this.State);
postUrl.AppendFormat("BZIP~{0}|", this.Zip);
postUrl.AppendFormat("SADDRESS~{0}|", this.AddressLine1);
postUrl.AppendFormat("SADDRESS2~{0}|", this.AddressLine2);
postUrl.AppendFormat("SCITY~{0}|", this.City);
postUrl.AppendFormat("SSTATE~{0}|", this.State);
postUrl.AppendFormat("SZIP~{0}|", this.Zip);
if (!String.IsNullOrEmpty(this.Country))
{
    postUrl.AppendFormat("BCOUNTRY~{0}|", this.Country);
}
if (!String.IsNullOrEmpty(this.Description))
{
    postUrl.AppendFormat("DESCRIPTION~{0}|", this.Description);
}
if (!String.IsNullOrEmpty(this.InvoiceNumber))
{
    postUrl.AppendFormat("INVOICE~{0}|", this.InvoiceNumber);
}
if (this.IsTestMode)
{
    postUrl.AppendFormat("TEST~Y|");
}

//postUrl.Append();

WebClient wClient = new WebClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
String sRequest = "PARMLIST=" + Url.Encode(postUrl.ToString());
wClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string sResponse = "";
sResponse = wClient.UploadString(PayTraceUrl, sRequest);
<!-Aussi, juste pour Info, ce problème se produit aussi lorsque nous nous connectons à la passerelle First Data E4, donc ce n'est pas juste une chose de PayTrace. À mon avis, à mesure que D'autres passerelles désactivent L'accès à SSL3, nous allons continuer à rencontrer des problèmes avec d'autres passerelles jusqu'à ce que cela puisse être résolu sur le serveur. Aussi, j'ai trouvé quelques suggestions en ligne, certains ont suggéré de placer le code suivant juste avant de faire le sortant de demande:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

malheureusement cela n'a pas fonctionné non plus, même erreur. C'est pourquoi je pense que quelque chose de plus doit être installé sur L'IIS7.5 server. Je ne suis pas sûr de ce que.

19
demandé sur John Saunders 2014-11-04 21:10:38

6 réponses

il y a plusieurs autres Billets à ce sujet maintenant et ils pointent tous vers l'activation de TLS 1.2. Rien de moins est dangereux.

Vous pouvez le faire dans .NET 3.5 avec un patch.

Vous pouvez le faire dans .NET 4.0 et 4.5 avec une seule ligne de code

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0

dans .NET 4.6, il utilise automatiquement TLS 1.2.

Voir ici pour plus de détails: .NET le support de TLS

39
répondu Paul 2018-08-28 13:19:56

ceci a été résolu. Il s'avère que notre personnel informatique était correct. TLS 1.1 et TLS 1.2 ont été installés sur le serveur. Cependant, le problème était que nos sites fonctionnent comme ASP.NET 4.0 et vous devez avoir ASP.NET 4.5 pour exécuter TLS 1.1 ou TLS 1.2. Donc, pour résoudre le problème, notre personnel informatique a dû réactiver TLS 1.0 Pour permettre une connexion avec PayTrace.

donc en bref, le message d'erreur, "le client et le serveur ne peuvent pas communiquer, parce qu'ils ne possèdent pas un algorithme commun", était causé parce qu'il n'y avait pas de protocole SSL disponible sur le serveur pour communiquer avec les serveurs de PayTrace.

7
répondu matwonk 2014-11-07 21:44:24

L'activation de TLS 1.0 a également résolu nos problèmes (après avoir désactivé SSL v3). (Server 2012 R2 avec ASP.net 4.0 traitement du site web à l'aide des services de paye de L'IPP). C'est le script RegEdit que j'ai utilisé pour tout mettre comme je le voulais. Nous n'avons désactivé SSL v3 que pour le Client et non pour le serveur car cela a cassé d'autres choses que nous n'étions pas encore prêts à traiter. Après avoir mis à jour le site en .net 4.5.2, nous désactiverons à nouveau TLS 1.0.

ce script active tous les protocoles, serveur et Client à l'exception de SSL v3 pour le Client.

- Eric Niemiec

(assurez-vous de sauvegarder votre registre!!)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
5
répondu Eric Niemiec 2016-10-27 07:55:58

Dans une réponse précédente, il a été suggéré d'utiliser cette ligne de code pour .Net 4.5:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5

je vous encourage à ou cette valeur dans toutes les valeurs existantes sont comme ceci:

ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; // .NET 4.5

Si vous regardez la liste de valeurs, vous remarquerez qu'ils sont une puissance de deux. Ainsi, à l'avenir, lorsque les choses évolueront vers TLS 2.0 par exemple, votre code fonctionnera toujours.

3
répondu Philly Frank 2018-06-28 19:15:06

après avoir joué avec cela pendant des jours, mon dernier correctif pour nos problèmes a exigé deux choses;

1) nous avons ajouté cette ligne de code à toutes nos bibliothèques .Net qui font des appels api liés à d'autres fournisseurs qui avaient aussi désactivé leur V3 SSL.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; // (.Net 4 and below)

2) Il s'agit des modifications finales et complètes du registre dont vous aurez besoin lorsque vous lancerez ASP.Net 4.0 sites et devra être légèrement modifié après votre mise à niveau ASP.Net 4.5.

après avoir redémarré les serveurs - tous les problèmes ont disparu après ça.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
0
répondu Eric Niemiec 2016-10-27 08:04:39

dans les réponses précédentes, quelques clés de Registre qui n'existent peut-être pas sont manquantes. Ils sont SchUseStrongCrypto qui doit exister pour permettre aux protocoles TLS de fonctionner correctement.

après que les clés du registre ont été importées pour enregistrer, il ne devrait pas être nécessaire de faire des changements dans le code comme

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

ci-dessous il y a toutes les clés de registre et les valeurs qui sont nécessaires pour x64 Windows OS. Si vous avez 32bit OS (x86) il suffit de supprimer les 2 dernières lignes. TLS 1.0 sera désactivé par le script du registre. Le redémarrage de L'OS est nécessaire.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\client]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\server]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2\client]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2\server]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
0
répondu Mikhail Titov 2018-07-24 09:19:44