我在使用C# PayTrace Gateway时遇到了问题。以下代码在昨天之前一直正常工作,但我认为他们由于Poodle Exploit关闭了SSL3。运行下面的代码后,我们收到了以下消息:“远程服务器已强制关闭连接”。在研究了这个问题后,我们确定因为我们的IIS Server 7.5仍配置为使用SSL3,C#默认使用SSL3,导致PayTrace强制关闭连接。然后我们从服务器中删除了SSL3,但随之而来的是以下错误:
“客户端和服务器无法通信,因为它们没有共同的算法。”
我猜测现在我们需要安装其他SSL算法在服务器上,因为SSL 3已被删除。我们的IT人员声称TLS 1.1和TLS 1.2正在工作,并且ASP.NET应该现在默认使用它们。但我觉得我们仍然必须在服务器上安装其他东西,我对SSL算法一无所知,也不知道从哪里开始。
另外,只是提醒一下,当我们连接到First Data E4网关时,也会出现这个问题,所以不仅仅是PayTrace的问题。我猜测随着更多的网关关闭SSL3访问权限,我们将继续在其他网关上遇到问题,直到服务器解决此问题为止。此外,我在网上找到了一些建议,有些建议在发出请求之前放置以下代码:
“客户端和服务器无法通信,因为它们没有共同的算法。”
我猜测现在我们需要安装其他SSL算法在服务器上,因为SSL 3已被删除。我们的IT人员声称TLS 1.1和TLS 1.2正在工作,并且ASP.NET应该现在默认使用它们。但我觉得我们仍然必须在服务器上安装其他东西,我对SSL算法一无所知,也不知道从哪里开始。
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);
另外,只是提醒一下,当我们连接到First Data E4网关时,也会出现这个问题,所以不仅仅是PayTrace的问题。我猜测随着更多的网关关闭SSL3访问权限,我们将继续在其他网关上遇到问题,直到服务器解决此问题为止。此外,我在网上找到了一些建议,有些建议在发出请求之前放置以下代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
不幸的是,那也没有起作用,出现了相同的错误。这就是为什么我认为需要在IIS7.5服务器上安装一些额外的东西。只是我不确定是什么。