我有一台带有IIS 7的Windows 2008 Server,它使用.NET C#应用程序向PayPal发送请求以处理付款。几个月前,我安装了Verisign购买的证书。安装后,我能够运行我的WebClient代码以成功创建SSL连接,并通过PayPal NVP API(名称值对)处理付款。
最近,我在SSL交易期间收到错误。具体错误如下:
无法创建SSL / TLS安全通道
我已经检查了我能想到的一切,并在网上阅读了很多关于StackOverflow和其他地方的文章。
我找到的最好的资源是:
请求已中止:无法创建SSL / TLS安全通道
查看本文中的错误http://support.microsoft.com/kb/915599解决方案J.也可能是您没有提供客户端证书。很可能这是使用TLS或SSL3的问题,服务器不理解它。
以下列出了我尝试阅读并诠释其解决方案的所有其他资源:
我试过的各种链接:
http://support.microsoft.com/kb/901183
Could not create SSL/TLS secure channel - Could the problem be a proxy server?
The request was aborted: Could not create SSL/TLS secure channel
http://forums.iis.net/t/1156690.aspx
我尝试了以下解决方案:
添加了此ServiceManager代码:
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
启用日志记录以获取更详细的详细信息
令人沮丧的是,这几个月前工作正常,现在我收到了这个错误。起初,我认为证书已过期,但看起来没问题。
它可能是Windows Server的Service Pack或Hotfix创建了一个破坏SSL的新设置或方案。我认为重新安装证书可以解决这个问题。
重要的是要注意,当我重新安装时,我只是将其添加到各个商店(双击证书并安装)。我没有创建“证书申请”。由于它已经安装并绑定到我的IIS应用程序的SSL端口,它应该没问题。
这是创建网络请求的代码:
public static Hashtable DoWebReq(string strNVP, string strNVPSandboxServer)
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
string _strNVP = strNVP;
//Create web request and web response objects, make sure you using the correct server (sandbox/live)
var wrWebRequest = (HttpWebRequest)WebRequest.Create(strNVPSandboxServer);
wrWebRequest.Method = "POST"; // POST
var requestWriter = new StreamWriter(wrWebRequest.GetRequestStream());
requestWriter.Write(_strNVP);
requestWriter.Close();
// Get the response.
var hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();
var responseReader = new StreamReader(wrWebRequest.GetResponse().GetResponseStream());
//and read the response
string responseData = responseReader.ReadToEnd();
responseReader.Close();
string result = System.Web.HttpContext.Current.Server.UrlDecode(responseData);
string[] arrResult = result.Split('&');
Hashtable htResponse = new Hashtable();
string[] responseItemArray;
foreach (string responseItem in arrResult)
{
responseItemArray = responseItem.Split('=');
htResponse.Add(responseItemArray[0], responseItemArray[1]);
}
return htResponse;
}
以下是一系列屏幕截图,用于显示SSL计算机的各个组件:
这是IIS中的SSL绑定设置:
以下是已安装的Certs的概述:
这是我收到的错误:
Certs已安装:
证书详情
任何有关修复此错误的建议都将非常受欢迎。我考虑但未解决的一些可能性是:
我认为无论SSL是否有效,它对PayPal都没有任何影响/依赖......但我可能错了。
我觉得我应该只能使用由WebClient类构建的名称值对URL,并通过IE在管道上发送并接收响应。
答案 0 :(得分:2)
我认为问题可能不在您的客户证书中,而是在PayPal中。
关于你的问题:
在Internet Explorer中,我确实看到绿色“SSL条”,它显示此网站已被验证为安全。这告诉我Cert安装正确,这是真的吗?
不,这意味着您的浏览器会验证PayPal的服务器证书,即PayPal的证书由作为您的证书颁发机构添加的人签名。但是,PayPal的证书不会添加到您的可信证书中。
我还注意到,PayPal的当前证书的有效期为23.3.2011。也许在那之前你的应用程序正在运行,现在它已被更改,应用程序已停止工作。
基于此,我建议尝试将PayPal自己的证书安装为服务器证书。
答案 1 :(得分:0)