2017-05-22 162 views
-1

我目前在我的邮件服务中实现了OpenSSL的TLS/SSL标准,允许我的用户选择他们想要的TLS/SSL版本。下面是版本的列表:OpenSSL 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 。我不明白clientserver之间的区别,但从我自己的测试中,server选项在尝试使用它发送邮件时会返回错误。

所以我的问题是 - 该清单,我应该删除什么?

+0

你在哪里看到这个版本的列表?另外:为什么你会让用户选择一个TLS版本?您应始终使用可用的最高版本。 – duskwuff

+0

OpenSSL提供的TLS版本没有什么特别之处。它们与RFC所呼吁的一样。 – jww

回答

1

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

在邮件客户端中,您不希望使用任何特定于服务器的SSL上下文,因为对于这些邮件客户端而言,希望对等方首先使用TLS握手,而不使用它。

欲了解更多详情,请参阅SSL_CTX_new的手册页,其中详细描述了所有这些不同的上下文意味着什么。

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

虽然您的具体实现是错误的,但让用户选择协议版本的想法也是错误的。相反,您应该只使用通用上下文而没有限制(除了禁用不安全版本),以便在TLS交换期间自动选择最佳协议版本。选择特定的协议版本应该只在对等TLS堆栈被破坏的情况下才能完成,就像堆栈只是拒绝TLS 1.2握手而不是在TLS1.0中回应,以防TLS1.2不支持TLS1.2。

+0

通过1.0.2'歇斯底里葡萄干注意'的通用方法保留了旧的和现在误导的名字'SSLv23_ {client_,server_} method'在1.1.0中,去年发布但到处都没有采用,它们被重命名为'TLS_ * method'。 –

+0

这正是我正在寻找的答案 - 谢谢。我打算有一个默认版本(TLSv1_2_client是我心目中的),但有一些版本导致客户问题,所以我们决定最好的解决方案是有一些其他版本供他们选择。 – theGreenCabbage

+0

@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并选择最好的一个。 –

相关问题