首页 > 解决方案 > 在 .NET Compact Framework 3.5 上实现 TLS 1.2

问题描述

我几乎花了一整天的时间来弄清楚如何最好地完成标题中提到的任务。

这是我到目前为止发现的:

  1. 至少有一个库为 .NET CF 提供开箱即用的 TLS 1.2。缺点:他们收取许可证费用。如果有人对这个简单的解决方案感兴趣,Rebex Library

  2. 有几个 SSL/TLS 库允许与较低级别的服务器通信。我的方法是为我完成的 .NET Compact Framework 编译 BouncyCastle 库。

从这里开始,我找到了一篇文章,向我展示了如何实现 BouncyCastle 接口以及如何将各个部分组合在一起。有关详细信息,请参阅使用 BouncyCastle 库在 C# 中进行 HTTPS 调用。这几乎就是我的代码现在的样子。

我完成了与服务器建立连接并发送了一个请求,我也得到了预期的响应。然后我想利用 HttpWebRequest 类,这样我就不必自己编写 HTTP 请求了。或者我是这么想的。不可能。HttpWebRequest 没有公共构造函数。因此我不能从那个类继承。例如,我也尝试过使用 RestSharp 但这也仅依赖于 WebRequest 类。基本上所有可用的 HTTP 客户端都使用 Uri,然后自己打开一个流。似乎没有一个人使用已经打开的流并写入它或提供一些加密 API 来使用,而不是平台默认提供的(当然除了提到的 Rebex 库)。

所以我的问题是:是否有任何 HTTP 客户端可以将 HTTP 命令写入已经打开的流,或者至少给我一个字符串表示我在上面设置的内容?还是我必须自己编写类似的代码,即使已经有很多这样的实现?还是我完全错过了一点并且可以更容易地解决?

标签: c#compact-frameworkbouncycastle.net-cf-3.5

解决方案


根据您的研究,您能否在您的 CF 应用程序中设置一种代理?

在您的应用程序的其余部分使用 HttpWebRequest 和响应,但将它们定向到您的内部代理(在 127.0.0.1)。

代理将处理 TLS 连接,然后它使用套接字侦听器来拦截来自您的 HttpWebRequest 的 HTTP 请求,但不需要将它们解析出来,只需将它们沿着您已经打开的套接字转发。同样,返回的 TCP 流量将从真实主机发送回本地套接字(同样它不被解析,只是被视为缓冲区)。


推荐阅读