我有一个小型的C#应用程序,它通过HTTPS使用WebClient从web服务下载数据(URL开始于WebClient)。以下内容很长时间以来运作良好:
public class WebClientEx : WebClient {
public int Timeout {get; set;}
protected override WebRequest GetWebRequest(Uri address) {
var request = base.GetWebRequest(address);
if (request != null)
request.Timeout = Timeout;
return request;
}
}
using (var client = new WebClientEx()) {
client.Proxy = new WebProxy(ProxyUrl) { Credentials = CredentialCache.DefaultCredentials };
client.Timeout = 900000;
var fields = new NameValueCollection { /* .... */ };
byte[] respBytes = client.UploadValues(url, fields);
/* .... */
}
但是,web服务的提供者最近更新了他们的SSL证书,现在我得到了以下内容:
基础连接已关闭:无法为SSL/TLS安全通道建立信任关系。
我可以禁用SSL验证以“使其工作”:
public class WebClientEx : WebClient {
public int Timeout {get; set;}
protected override WebRequest GetWebRequest(Uri address) {
var request = base.GetWebRequest(address);
if (request != null)
request.Timeout = Timeout;
if (SSLCheckDisabled) {
try {
//Change SSL checks so that all checks pass
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
}
catch {
}
}
return request;
}
}
但出于明显的原因,我不想这么做!
在Windows7+ IE9上,证书在IE中是安全的和完全可信的。在使用.NET Framework4.0 WebClient访问web服务的Windows2003服务器上,IE6在一个安全警报中说:
安全证书是由您未选择信任的公司颁发的。查看证书以确定是否要信任验证机构.
链尾的证书“不受信任”是:
发行给: DigiCert高保证EV根CA
发行: DigiCert高保证EV根CA
此故障排除页面在顶部说“在此路径中的根证书名为DigiCert高保证EV根CA,并且已经被所有现代浏览器.所信任”。所有在线SSL检查程序在我测试它们时都会通过域。
所以,我的问题是--如何让我的WebClient表现得更像IE9而不是IE6,并信任这个交叉签名的SSL证书?
发布于 2013-10-15 09:39:21
如果计算机信任根CA,则信任该CA颁发的证书。您需要将Digicert根CA证书添加到计算机的可信根CA组中。这可以使用计算机帐户的证书MMC卡入来完成。
导出根CA证书
信任根CA
https://stackoverflow.com/questions/19377434
复制相似问题