在.NET Compact Framework 3.5上实现TLS 1.2

时间:2018-07-18 15:29:07

标签: c# compact-framework bouncycastle .net-cf-3.5

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

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

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

  2. 那里有几个SSL / TLS库,可以与较低级别的服务器进行通信。我的方法是为我完成的.NET Compact Framework编译BouncyCastle库。

从这里开始,我发现了一篇文章,向我展示了如何实现BouncyCastle接口以及如何将各个部分组合在一起。有关更多信息,请参见Making HTTPS call in C# with the BouncyCastle library。这几乎就是我的代码的样子。

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

所以我的问题是:是否有任何HTTP客户端可以将HTTP命令写入到已经打开的流中,或者至少可以给我一个我在其上设置的字符串表示形式?还是我已经必须自己编写类似的代码,即使已经有很多这样的实现了?还是我完全遗漏了一点,可以更轻松地解决它?

1 个答案:

答案 0 :(得分:0)

根据您的研究,您可以在CF应用程序中设置某种代理吗?

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

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