【问题标题】:Difference between OpenSSL TLS/SSL versionsOpenSSL TLS/SSL 版本之间的区别
【发布时间】:2017-10-22 12:54:27
【问题描述】:

我目前正在我的邮件服务中实施 OpenSSL 的 TLS/SSL 标准,允许我的用户选择他们想要的 TLS/SSL 版本。以下是版本列表:

["TLSv1","TLSv1_server","TLSv1_client","SSLv3","SSLv3_server","SSLv3_client","SSLv23","SSLv23_server","SSLv23_client","TLS","TLSv1_1_server","TLSv1_1_client","TLSv1_1","TLSv1_2","TLSv1_2_server","TLSv1_2_client"]

我在谷歌上搜索了一些选项的区别,我知道某些版本已被弃用,或者由于安全问题不应该使用,例如TLSv1。我不明白client 与server 之间的区别,但根据我自己的测试,server 选项在尝试使用它发送邮件时会返回错误。

所以我的问题是 - 在那个列表中,我应该删除什么?

【问题讨论】:

  • 您在哪里看到此版本列表?另外:为什么要让用户选择 TLS 版本?您应该始终使用可用的最高版本。
  • OpenSSL 提供的 TLS 版本没有什么特别之处。它们与 RFC 中提到的相同。

标签: security ssl smtp


【解决方案1】:

您展示的不是 SSL/TLS 版本,而是各种类型的 SSL 上下文,其中还包括可用的 SSL/TLS 版本。这意味着*_server“版本”都是 SSL 上下文,应该在通常还需要证书的服务器端使用。 *_client 变体用于 TLS 握手的客户端,即启动 TLS 握手的那个。

在邮件客户端中,您不想使用任何服务器特定的 SSL 上下文,因为使用这些上下文,邮件客户端会期望对等方以 TLS 握手开始,而它没有。

有关更多详细信息,请参阅 SSL_CTX_new 的手册页,其中详细描述了所有这些不同上下文的含义。

...允许我的用户选择他们想要的 TLS/SSL 版本。

虽然您的具体实现是错误的,但让用户选择协议版本的想法也是错误的。相反,您应该只使用没有限制的通用上下文(除了禁用不安全的版本),以便它在 TLS 交换期间自动选择最佳协议版本。仅应在对等 TLS 堆栈损坏的情况下选择特定的协议版本,例如仅拒绝 TLS 1.2 握手而不是使用 TLS 1.0 回复的堆栈,以防它们不支持 TLS 1.2。

【讨论】:

  • 注意 1.0.2 'for hysterical raisins' 通用方法保留了旧的和现在具有误导性的名称SSLv23_{client_,server_}method 在去年发布但尚未在所有地方采用的 1.1.0 中,它们被重命名为 @ 987654325@.
  • 这正是我正在寻找的答案 - 谢谢。我确实打算有一个默认版本(TLSv1_2_client 是我想到的),但有时某些版本会给客户带来问题,所以我们决定最好的解决办法是让他们选择其他版本.
  • @theGreenCabbage: TLSv1_2_client_method 支持仅 TLS 1.2,即无法连接到仅支持 TLS 1.0 的服务器。最好使用SSLv23_client_method,但使用SSL_CTX_set_options 禁用SSLv2 和SSLv3,如文档中所述。这样它将支持 TLS 1.0 ... TLS 1.2 并选择最好的。
  • 嘿@SteffenUllrich,你是说你可以在OpenSSL::SSL::SSLContext::METHODS 上使用SSL_CTX_set_options 吗?我检查了文档,但不是很清楚..
  • @theGreenCabbage:我不确定什么不是很清楚。从文档中引用:可以使用 SSL_CTX_set_options 或 SSL_set_options 函数的 SSL_OP_NO_SSLv2、SSL_OP_NO_SSLv3、SSL_OP_NO_TLSv1、SSL_OP_NO_TLSv1_1 和 SSL_OP_NO_TLSv1_2 选项进一步限制可用的协议列表。
猜你喜欢
  • 1970-01-01
  • 2015-02-10
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多