使用WebClient时如何强制执行SSL?

时间:2015-04-21 13:08:05

标签: c# .net ssl https webclient

在.NET 2.0 Forms应用程序中,我使用WebClient通过SSL与Web服务器通信。在通信中,密码以HTTP GET或POST参数发送到服务器(意味着它放在WebClient.QueryString中)。

必须(显然)避免以明文形式传输密码。现在,我到目前为止所做的是假设只是确保各种WebClient函数的URI参数以“https://”开头就足够了:

// 'path' is something like "www.example.com/example.php"
var uri = new Uri(string.Format("https://{0}", path));
webCl.QueryString = new NameValueCollection();
webCl.QueryString.Add("passwd", "my_password");
var reply = webCl.DownloadString(uri);

但我不确定。这是否足以保证如果连接未加密,则不会发生GET或POST参数(UploadString())的明文传输?我的假设是,如果SSL握手失败,则不会发生HTTP参数的传输,并且只有在启用加密的情况下才能成功进行SSL握手。

1 个答案:

答案 0 :(得分:1)

你的假设是正确的。如果您强制基本URI为" https"那么查询字符串流量将通过加密的SSL链接。您也可以使用WebClient.BaseAddress属性。

您可能想要特别关注的是您允许的特定安全协议。特别是,在最近的SSL 3安全问题之后,您可能只想允许TLS。

System.Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls

在相关的说明中,您当然希望在DownloadString的呼叫周围设置一个try / catch,以确保您处理错误。