【发布时间】:2018-08-14 06:24:06
【问题描述】:
结束更新 正如我在下面的评论中宣布的那样,我决定停止解决这个问题,因为我很确定我无法修复它,因为无法访问该网站的源代码。我已经假设我面临的大多数问题都是由不正常的反编译过程引起的,所以我没有找到任何理由至少现在继续处理它。 非常感谢所有阅读、思考或试图帮助我的人。 我没有找到解决这个问题的方法,可能是因为我作为“新”用户缺乏特权,所以如果有特权的人阅读了这篇文章并可以帮助关闭它,我们将不胜感激:-)
早上好。由于这是我在这里的第一篇文章,我想开始感谢你们所有人的耐心、同理心和无价的帮助。 现在让我们尽可能清楚地解释我的情况:与其他许多人一样,我正在遭受由 TLS 1.2 标准引起的问题:现在我无法连接到我们的支付网关(Realex Payments,以防它产生任何影响)因为他们拒绝所有非 TLS 1.2 连接。 我已经“继承”了一个完整的网站,其中包含大量 C# .NET 部署代码(老实说,我绝对不掌握),所以我的第一个动作是从服务器下载所有这些代码并反编译 dll 文件使用 .NET 反射器 9.0。 该系统是在 .NET 3.5 框架下开发的,我保证我在这里、Microsoft 支持站点和整个 Web 上阅读了很多关于它的信息。我能找到的最佳解决方案来自这里的 2 个帖子:
.NET Framework 3.5 and TLS 1.2
How to implement Security Protocols TLS 1.2 in .Net 3.5 framework
与 D_Bester 的答案基本相同。
我发现的问题是,当我尝试粘贴此 C# 代码时:
public const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
public const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
ServicePointManager.SecurityProtocol = Tls12
在作者指出的我的 httpwebrequest 之前,VS 2015 在第三句话中显示了一个错误
"The name 'ServicePointManager.SecurityProtocol' does not exist in the current context.
The name 'SecurityProtocol' does not exist in the current context."
如果有帮助,请提供更多信息: 我无法应用补丁或编辑注册表,因为整个网站都托管在在线托管中,但是当我们第一次遇到这个问题时,我们要求他们将我们的内容迁移到支持 .Net framework 4.5 的新服务器上。
尝试遵循找到的代码和其他解决方案,我编辑了我的 SslProtocols.cs 文件,手动将较新的协议添加到枚举中,如下所示:
namespace System.Security.Authentication
{
using System;
[Flags]
public enum SslProtocols
{
Default = 240,
None = 0,
Ssl2 = 12,
Ssl3 = 48,
Tls = 192,
Tls11 = 768,
Tls12 = 3072
}
}
但 ServicePointManager.cs 似乎无法识别我的更新,因为在它用作参数“SslProtocols.Tls12”的一种方法中,它不接受 Tls12,只接受原始的(默认、无、Ssl2、Ssl3 和Tls)所以我可能不得不在任何地方更新它。我还尝试将 Tls12 添加到 SecurityProtocolType.cs 枚举和 SecurityProtocolTypeExtensions.cs,所有这些都来自我现在无法找到的来源的指示(我发誓我已经添加了书签,但显然我没有)。
如果有帮助,我会编辑以添加我的导入列表:
using System;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Authentication;
using System.Security.Permissions;
using System.Text;
using System.Threading;
有什么想法吗?或者我是否需要提供任何其他信息?
【问题讨论】:
-
你添加了
using System.Net;吗? -
感谢您的回答。我确实这样做了,如果有帮助,我会用我的导入编辑我的第一篇文章。
-
我无法在面向 .Net 3.5 的项目中重现该问题。
-
我想我必须在其他任何地方“定义”Tls12,我的意思是,在另一个文件或配置中,但我不知道在哪里。无论如何感谢您的尝试;-)
标签: c# .net-3.5 tls1.2 realex-payments-api