C# OpenSSL 在 .Net Framework 4.0 中实现 TLS1.2

C# OpenSSL to achieve TLS1.2 in .Net Framework 4.0

提问人:Sujeet Saste 提问时间:12/19/2017 最后编辑:Sujeet Saste 更新时间:10/17/2018 访问量:1822

问:

我需要使用 OpenSSL 在 .Net 框架 4.0 中实现 TLS1.2。

我搜索了很多相同的内容,但找不到使用 OpenSSL 设置 TLS1.2 安全协议的代码片段,而不是现有方式或将 OpenSSL 添加到其中的另一种可能方式

我的要求是:

  1. 使用 TLS1.2 与我们的 Web 服务通信(从 Web 服务发送请求和读取响应)
  2. 我们无法将机器升级到 .Net 框架 4.5,它们有框架 .Net 4.0

当前的代码实现如下,允许/拥有 .Net 框架 4.0 及更高版本

var request = (HttpWebRequest)WebRequest.Create(strHostUrl);
            request.Method = "POST";                
            request.ContentType = "application/json";
            request.UserAgent = "Java/1.7.0_51";
            request.ContentLength = strRequest.Length;
            request.Proxy = null;
            request.KeepAlive = false;
            request.Timeout = intTimeoutInMS;
            request.ReadWriteTimeout = 3000;
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;

我们看到了使用 OpenSSL 来实现 TLS1.2 的选项。

是否有可能实现相同的目标?任何人都可以就上述问题提供一些帮助。

C# openssl net-2.0 tls1.2

评论

0赞 Sujeet Saste 12/20/2017
@rene感谢您的评论。我们已经尝试了这两个选项,但它无法将安全协议 Tls1.2 也升级到 。Net4.5 是不可能的,因此我们正在寻找使用 OpenSSL 在上面的代码中设置安全协议。是否可以通过任何可用的Nuget包使用OpenSSL,并且任何人都已经使用过它。提前致谢。
2赞 rene 12/21/2017
您无法神奇地将 OpenSSL 注入网络堆栈。但是,如果您愿意使用 curl 而不是内置的 (Http)WebRequest 类,则可以将 OpenSSL 作为依赖项,因此这可能适合您。您应该能够使用 curl 执行您现在使用 HttpWebRequest 所做的操作。
0赞 rene 12/21/2017
另一件事:在调用 WebRequest.Create 之前是否设置了 SecurityProtocol?在建立服务点设置安全协议是无用的,并且可能不会自行纠正,因为这些协议是缓存的,IIRC。您的代码示例表明了这一点,而我之前没有注意到它。

答:

0赞 anbuchelvan ponnusamy 10/17/2018 #1

现在,我已经在 .net framework 3.5 中进行了更改。请下载 OpenSSL 包装器 (1.0.2 a) 及更高版本,并将该项目包含在您的解决方案中,然后点击以下链接。https://www.openssl.org/docs/man1.0.2/