Ho un problema con un gateway PayTrace C#. Il codice seguente funzionava bene fino a ieri, quando ritengo che abbiano disattivato SSL3 a causa del Poodle Exploit. Quando si esegue il codice qui sotto abbiamo ricevuto il seguente messaggio. Il server remoto ha forzatamente chiuso la connessione. Dopo aver fatto alcune ricerche sul problema, abbiamo stabilito che, poiché il nostro IIS Server 7.5 era configurato per utilizzare ancora SSL3, C# era impostato su SSL3, che PayTrace chiudeva forzatamente la connessione. Abbiamo quindi rimosso SSL3 dal server. Che quindi portano al seguente errore:Il client e il server non possono comunicare, perché non possiedono un algoritmo comune
Il client e il server non possono comunicare, perché non possiedono un algoritmo comune.
Suppongo che ci sia un algoritmo SSL aggiuntivo che dobbiamo installare sul server ora che SSL 3 è stato rimosso. Il nostro staff IT afferma che TLS 1.1 e TLS 1.2 funzionano e che ASP.NET dovrebbe essere ora predefinito per tali. Ma sento che ci deve ancora essere qualcos'altro che dobbiamo installare sul server, non ho conoscenza degli algoritmi SSL quindi non ho idea da dove cominciare.
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);
Inoltre, solo una cronaca, questo problema si verifica anche quando ci colleghiamo a First Data E4 gateway in modo che non è solo una cosa PayTrace. La mia ipotesi è che mentre più gateway disattivano l'accesso a SSL3 continueremo a incorrere in problemi con altri gateway finché questo non può essere risolto sul server. Inoltre, ho trovato alcuni suggerimenti on-line, alcuni suggerito inserendo il seguente codice giusto prima di effettuare la richiesta in uscita:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
Purtroppo che non ha funzionato neanche, lo stesso errore. Ecco perché sto pensando che qualcosa di aggiuntivo debba essere installato sul server IIS7.5. Non sono sicuro di cosa.
Ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –