openvpn,選項 tls-cipher 不起作用,沒有共享密碼

openvpn,選項 tls-cipher 不起作用,沒有共享密碼

在嘗試設定 openvpn 時,我偶然發現網站上的這個提示。它說您可以限制密碼列表,以防止降級攻擊。我在有 2 台電腦的 LAN 中對其進行了測試,兩台電腦都運行帶有 OpenVPN 2.3.2 的 kubuntu 14.04。

在 openvpn 伺服器上的 server.conf 中,我插入了這一行

tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256

透過執行openvpn --show-tls和比較輸出,我確定我的 openvpn 版本(在伺服器和客戶端上)都知道上面一行中的每個密碼。

但是當我隨後啟動 openvpnserver 和客戶端時,伺服器給出以下輸出

Fri Sep 25 12:31:59 2015 "THECLIENTSIP":38749 TLS: Initial packet from [AF_INET]"THECLIENTSIP":38749, sid=d9c33d37 653b2f0e Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS_ERROR: BIO read tls_read_plaintext error: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS Error: TLS object -> incoming plaintext read error Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS Error: TLS handshake failed Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 SIGUSR1[soft,tls-error] received, client-instance restarting 如果沒有 tls-cipher 選項,它可以正常工作。

我不明白為什麼它說“沒有共享密碼”。列出用冒號分隔的密碼是錯誤的嗎?或是這裡有什麼問題?

感謝您的閱讀。我希望任何人都可以幫助我。

編輯 我將 server.conf 中的行替換為 , tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 看看會發生什麼。和openvpn伺服器的輸出是一樣的。

編輯2

我進一步搜尋並找到了這個網站https://community.openvpn.net/openvpn/wiki/Hardening 現在了解 OpenVpn 2.3.2 僅支援 SSLv3/TLSv1.0 密碼套件。而且openvpn --show-tls還顯示了 TLSv1.2 密碼套件

限制為 TLSv1.0 DHE + RSA 選擇會產生以下列表,適用於 <=2.3.2 對等體。最好避免選擇 DES,尤其是單 DES(已知非常弱。)

TLS-DHE-RSA-WITH-AES-256-CBC-SHA

TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA

TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA

TLS-DHE-RSA-WITH-AES-128-CBC-SHA

TLS-DHE-RSA-帶種子-CBC-SHA

TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA

TLS-DHE-RSA-帶 DES-CBC-SHA

避免所有 DES 密碼套件:已知 DES 非常弱(3DES-EDE 仍然可以) 避免所有 RC4 密碼套件:已知 RC4 很弱 避免所有 EXPORT 密碼套件:多年前就指定 EXPORT 很弱

當我在 server.conf 中使用這些密碼之一時,它就可以工作,例如 tls-cipher TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA

遺憾的是,該頁上沒有寫我自己如何準確地得到它......有人知道嗎?

由於 TLSv1.0 是 SSLv3 並且 openvpn 說它使用 OpenSSL 我嘗試通過 OpenSSL 獲取該信息,使用 grep 進行過濾, openssl ciphers -v | grep SSLv3 | grep Kx=DH 但輸出不同(例如單詞“WITH”沒有出現在該列表中)

假設可能只有符號不同,我嘗試用 sed openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | awk '{print $1}' 列印替換一些文字:

TLS-DHE-RSA-WITH-AES256-SHA TLS-DHE-RSA-WITH-CAMELLIA256-SHA TLS-DHE-RSA-WITH-AES128-SHA TLS-DHE-RSA-WITH-SEED-SHA TLS-DHE-RSA-WITH-CAMELLIA128-SHA

但這仍然與“強化 openvpn 文章”上的列表不同,我不確定,如果這是正確的方法的話...

在這個網站上鼓勵使用 DHE-RSA-AES256-SHA。所以,我假設,我可以與 openvpn 2.3.2 一起使用的最安全的 tls 密碼是 TLS-DHE-RSA-WITH-AES-256-CBC-SHA。但這個答案是 2013 年 11 月的。不知何故,現在這是一個不同的問題。但這都是為了找到最安全的 tls 密碼選項。

編輯3 好的,我可以擴充 openssl-grep-sed 指令

openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | sed 's/SHA/CBC-SHA/g'| awk '{print $1}'

印刷:

TLS-DHE-RSA-WITH-AES256-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA256-CBC-SHA TLS-DHE-RSA-WITH-AES128-CBC-SHA TLS-DHE-RSA-WITH-SEED-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA128-CBC-SHA

現在它與該文章中的列表相同,但沒有 DES 和 3DES 條目。

那麼現在這是正確的結果嗎?因為解決方案僅基於這樣的假設:openssl -v 指令和 openvpn --show-tls 指令的輸出之間僅存在符號差異。

編輯4 不抱歉,如果沒有 DES 和 3DES 條目,它與該文章中的列表不同。

openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | sed 's/SHA/CBC-SHA/g'| sed 's/AES/AES-/g' | sed 's/CAMELLIA/CAMELLIA-/g' | awk '{print $1}' 印刷:

TLS-DHE-RSA-WITH-AES-256-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA TLS-DHE-RSA-WITH-AES-128-CBC-SHA TLS-DHE-RSA-WITH-SEED-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA

但這是一種混亂的方式,不是嗎?只有當密碼名稱清單不增長時,它才有效。

抱歉,如果“問題”可能令人困惑......請發表評論,如果您至少花時間閱讀本文,非常感謝!

答案1

我認為 OpenVPN 還不支援 ECDHE - 我已經在 Debian 8.3(穩定)上嘗試了 OpenVPN 2.3.4,在 Debian 測試上嘗試了 2.3.10 作為伺服器,當使用 ECDHE 密碼套件指定 tls-cipher 時,從運行2.3 .10 的Windows 用戶端。到目前為止,只有 DHE 有效。

相關內容