【发布时间】:2011-08-24 02:01:15
【问题描述】:
我正在编写一个小程序,它将使用 HTTPS 和 HttpWebRequest 类向服务器发出 GET 请求。服务器(显然)具有服务器证书。它还希望客户端提供证书。
但是,在发出请求时,我收到 System.Net.WebException,指出无法建立安全的 TLS/SSL 连接。我很快发现服务器的证书无效。假设这是导致异常的原因,我尝试使用以下代码接受无效证书(不幸的是,更新证书不是一种选择):
ServicePointManager.ServerCertificateValidationCallback += delegate {
return true;
};
然而,这并没有解决问题。
由于异常没有提供任何细节,因此很难确定是什么原因造成的。我尝试覆盖无效的服务器证书是否不起作用?我提供的客户端证书是否不受服务器信任?我没有以正确的方式加载客户端证书吗?
我很想知道如何调试这类问题的提示。很遗憾,我无权访问服务器或其日志。
下面是代码的重要部分:
ServicePointManager.ServerCertificateValidationCallback += delegate {
return true;
};
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); // url is an HTTPS URL.
X509Certificate clientCert = new X509Certificate("certificate.crt", "password");
req.ClientCertificates.Add(clientCert);
WebResponse resp = req.GetResponse(); // This fails!
【问题讨论】:
-
FWIW,您可以尝试在使用您的应用程序时运行 Fiddler (www.fiddler2.com)。在这种情况下,Fiddler 往往会显示更具描述性的错误消息。
标签: c# .net https httpwebrequest x509certificate