openvpnの設定を試しているときに、偶然見つけたウェブサイト上のこのヒントダウングレード攻撃を防ぐために、暗号のリストを制限できるとのことです。私は、OpenVPN 2.3.2 を搭載した kubuntu 14.04 を実行している 2 台のコンピューターがある LAN でこれをテストしました。
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/強化
OpenVpn 2.3.2はSSLv3/TLSv1.0暗号スイートのみをサポートしていることがわかりました。ただし、openvpn --show-tls
TLSv1.2暗号スイートも表示されます。
TLSv1.0 DHE + RSA の選択肢に制限すると、<=2.3.2 ピアに適した次のリストが生成されます。DES の選択肢は、特にシングル DES (非常に弱いことが知られています) は避けるのが最善です。
TLS-DHE-RSA-AES-256-CBC-SHA 付き
TLS-DHE-RSA-CAMELLIA-256-CBC-SHA で
TLS-DHE-RSA-3DES-EDE-CBC-SHA 付き
TLS-DHE-RSA-AES-128-CBC-SHA 付き
TLS-DHE-RSA-シード付き-CBC-SHA
TLS-DHE-RSA-CAMELLIA-128-CBC-SHA で暗号化された RSA 署名。
TLS-DHE-RSA-DES-CBC-SHA 付き
すべての DES 暗号スイートを避けてください。DES は非常に弱いことが知られています (3DES-EDE はまだ問題ありません) すべての RC4 暗号スイートを避けてください。RC4 は弱いことが知られています すべての EXPORT 暗号スイートを避けてください。EXPORT は何年も前に弱いことが指定されています
そして、server.confでこれらの暗号の1つを使用すると機能します。例:
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 をサーバーとして試しましたが、2.3.10 を実行している Windows クライアントから接続して tls-cipher が ECDHE 暗号スイートで指定されている場合、どちらも機能しません。これまでのところ、DHE のものだけが機能します。