2017-05-22 159 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並選擇最好的一個。 –

相關問題