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

标签 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 握手才能成功。

最佳答案

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

然而,您可能需要特别注意的是您允许的特定安全协议(protocol)。特别是,在最近的 SSL 3 安全问题之后,您可能只想允许 TLS。

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

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

关于c# - 使用 WebClient 时如何强制执行 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773142/

相关文章:

c# - 如何使字符串在 C# 中的所有形式中可用

c# - WebBrowser.url 在 winform 中有时不工作

.net - Mono 中的尾调用消除

android - 自定义 GRPC 客户端 stub - 流未启动

.net - 从某些客户端使用 MySqlConnection (.NET) 以 SSL 连接到 MySql-server 失败

eclipse - 使用 subclipse 显示接受证书对话框

c# - 将方法调用序列化为 JSON,然后反序列化并调用该方法

c# - 如何从控制台应用程序访问 UserManager 和 RoleManager?

c# - 将 Entity Framework 对象实例持久化到 xml

c# - 银光 + WCF。流式传输音频和视频文件