相关疑难解决方法(0)

请求已中止:无法创建SSL/TLS安全通道

WebRequest由于此错误消息,我们无法连接到HTTPS服务器:

The request was aborted: Could not create SSL/TLS secure channel.

我们知道服务器没有使用路径的有效HTTPS证书,但是为了绕过这个问题,我们使用以下代码,我们从另一个StackOverflow帖子中获取:

private void Somewhere() {
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}

private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
   return true;
}
Run Code Online (Sandbox Code Playgroud)

问题是服务器永远不会验证证书并因上述错误而失败.有谁知道我该怎么办?


我应该提到一位同事和我几周前进行了测试,并且它与我上面写的内容类似.我们发现的唯一"主要差异"是我使用的是Windows 7并且他使用的是Windows XP.这有什么改变吗?

c# asp.net httpwebrequest windows-7 windows-8

349
推荐指数
29
解决办法
63万
查看次数

.NET应用程序无法发送客户端证书 - Win 7 vs Win XP?

我正在开发一个ASP.NET Web应用程序,它使用HttpWebRequest向另一台服务器发送请求.它通过HTTPS发送请求,远程服务器需要客户端证书.请求在.NET应用程序中失败,显然无法发送正确的客户端证书.我能够成功连接并发送客户端证书,如果我只需访问URL以网页浏览器(Chrome明确).

下面的代码是一个简单的再现,只有一个基本的GET请求.

var r = WebRequest.Create(url) as HttpWebRequest;
r.ClientCertificates = new X509CertificateCollection { myX509Cert };
using (var resp = r.GetResponse() as HttpWebResponse) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我得到了我们最喜欢的例外,"无法创建SSL/TLS安全通道".通常,这些类型的问题指向证书私钥的权限问题.我尝试了所有我能想到的东西,以确保这一切都正确配置,但也许我错过了一些东西.简而言之,远程服务器正在发送一个TLS CertificateRequest,其列表似乎正确地标识了我的客户端证书,但我的应用程序无法响应任何客户端证书.

这是我的设置:

  • Windows 7专业版64位
  • 能够在Visual Studio开发服务器,在本地IIS中运行的ASP.NET WebForms/.NET 3.5应用程序以及.NET控制台应用程序/ .NET 4中运行的ASP.NET MVC 3/.NET 4应用程序中重现该问题
  • 最近安装了Microsoft .NET Framework 4.5.还没有检查这是否是一个问题

这是我尝试过的一切,以及我所知道的:

  • 在Windows XP计算机上运行时,此代码似乎工作正常
  • 我确保将我的客户端证书导入到本地计算机,个人证书存储中,并为我自己和所有相关IIS用户正确配置了私钥权限
  • 我尝试在我的机器上重新安装证书几次
  • 我已经确认.NET应用程序可以访问X509证书并且HasPrivateKey= true
  • 确保我的客户证书有效.它实际上是运行此应用程序的Web服务器的SSL证书
  • PreAuthenticate = true在请求对象中设置.没有什么区别
  • 我尝试过设置ServicePointManager.Expect100Continue = false,没有什么区别
  • 我试过设置ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但显然远程服务器需要TLS,所以没有帮助
  • 我设置一个ServicePointManager.ServerCertificateValidationCallback委托总是返回true.但是,在TLS握手中,它甚至在调用此委托之前就失败了
  • 当我转到Chrome中的URL时,它会要求我提供客户端证书,提供正确的客户端证书作为选择,我选择该证书并获得有效的响应.当我在Fiddler中构造请求时也能正常工作.所以它似乎特别是我的.NET代码,而不是证书本身或远程服务器等问题.
  • 我正在使用的供应商在不同的远程服务器上设置了相同的服务,该服务需要不同的客户端证书.所以我尝试了不同的URL和客户端证书同样的事情,并得到了同样的失败

我添加了System.Net跟踪,看到了这个: …

.net ssl client certificate

19
推荐指数
2
解决办法
1万
查看次数

标签 统计

.net ×1

asp.net ×1

c# ×1

certificate ×1

client ×1

httpwebrequest ×1

ssl ×1

windows-7 ×1

windows-8 ×1