c# - 在 .NET Compact Framework 3.5 上实现 TLS 1.2

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

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

这是我目前发现的:

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

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

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

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

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

最佳答案

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

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

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

关于c# - 在 .NET Compact Framework 3.5 上实现 TLS 1.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51405813/

相关文章:

c# - WindowProc 对于 c# 中的窗体

Java BC SicBlockCipher直接输出等价于c#

c# - 在到达 ModelBinder 之前推进 Request.InputStream

c# - 如何在 .NET 中连接到 USB 网络摄像头?

ssl - 有人让 Twitter xAuth 使用 Compact Framework 了吗?

windows-mobile - Compact Framework的Zip库选项?

c# - 从 catch Exception block 中使用 CancellationToken.Cancel() 是否有效?

c# - Azure 服务总线订阅者定期给家里打电话?

java - 如何使用 BouncyCaSTLe 获取根 CA 和最终实体之间的证书路径?

pdf - 无法使用Apache PDFBOX验证数字签名