关闭更新 正如我在下面的评论中宣布的那样,我决定停止解决这个问题,因为我很确定我无法修复它,因为无法访问该网站的源代码。我假设我面临的大多数问题都是由一个运行不正常的反编译过程引起的,所以我没有找到任何理由至少现在继续处理它。非常感谢所有阅读、思考或试图帮助我的人。我没有找到解决这个问题的方法,可能是因为我作为“新”用户缺乏特权,所以如果有特权的人阅读了这篇文章并可以帮助关闭它,我们将不胜感激:-)
早上好。由于这是我在这里的第一篇文章,我想开始感谢你们所有人的耐心、同理心和无价的帮助。现在让我们尽可能清楚地解释我的情况:与其他许多人一样,我正在遭受由 TLS 1.2 标准引起的问题:现在我无法连接到我们的支付网关(Realex Payments,以防它产生任何影响)因为他们拒绝所有非 TLS 1.2 连接。我已经“继承”了一个完整的网站,其中包含大量 C# .NET 部署代码(老实说,我绝对不掌握),所以我的第一个动作是从服务器下载所有这些代码并反编译 dll 文件使用 .NET 反射器 9.0。该系统是在 .NET 3.5 框架下开发的,我保证我在这里、Microsoft 支持站点和整个 Web 上阅读了很多关于它的信息。
如何在 .Net 3.5 框架中实现安全协议 TLS 1.2
基本上与 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 框架 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;
有任何想法吗?或者我可能需要提供任何其他信息?