【问题标题】:Bitwise OR on security protocols安全协议上的按位或
【发布时间】:2018-07-13 21:26:02
【问题描述】:

我在我们使用的一个 .NET 应用程序中遇到过这种情况,我想知道它的实际作用。

System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;

我知道|= 运算符是x = x | y 的快捷方式,但那是位运算符。

它对安全协议有什么作用?

【问题讨论】:

  • 它仍然是位运算符。枚举只是其根的整数。使用 |和 & 与 enums 的工作方式与将它们与 int 一起使用的方式完全相同。您只需要小心为您的枚举选项提供适当的(例如 2 的幂)值。
  • 该运算符与安全协议无关,因为它只是一个标志的设置。可以在任何枚举上完成(或者可能只是标记枚举)。
  • 您正在向当前的ServicePointManager.SecurityProtocol 配置添加(从而启用)Tls1.2 协议。如果将其添加到基本配置 (SecurityProtocolType.SystemDefault = 0),这意味着将仅启用 Tls1.2。 SystemDefault 表示(通常,没有任何注册表修改)Ssl 3.0 和 Tls 1.0。

标签: c# .net security tls1.2


【解决方案1】:

System.Net.ServicePointManager.SecurityProtocol 属性是SecurityProtocolType 枚举类型的属性。

System.Net.SecurityProtocolType.Tls12 是 SecurityProtocolType 枚举上的可用标志之一。

System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;

正在为ServicePointManagerSecurityProtocol 属性设置Tls12 的标志。

SecurityProtocol 文档中有关于该属性的这些备注,

此属性选择安全套接字层 (SSL) 或传输层安全 (TLS) 协议的版本,以用于仅使用安全超文本传输​​协议 (HTTPS) 方案的新连接;现有连接不会改变。

您可以阅读有关FlagsAttribute 的更多信息,以了解有关按位运算符如何与enums 交互的更多信息,其要点是

位域通常用于可能组合出现的元素列表,而枚举常量通常用于互斥元素的列表。因此,位字段被设计为与按位或运算相结合以生成未命名的值,而枚举常量则不是。与枚举常量相比,语言在位域的使用上有所不同。

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多