在 .NET Compact Framework 3.5 上实现 TLS 1.2

Mar*_*utt 5 c# compact-framework bouncycastle .net-cf-3.5

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

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

  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 命令写入已经打开的流,或者至少给我一个我在其上设置的字符串表示?或者我是否必须自己编写类似的代码,即使已经有大量的这些实现?或者我完全错过了一个点,它可以更容易地解决?

tca*_*vin 0

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

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

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