экспериментируя с настройкой openvpn, я наткнулся наэтот совет на сайте. там говорится, что можно ограничить список шифров, чтобы предотвратить атаки с понижением версии. Я тестировал его в локальной сети с двумя компьютерами, на обоих из которых установлена Kubuntu 14.04 с OpenVPN 2.3.2.
в server.conf на сервере openvpn я вставил эту строку
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, особенно single-DES (известно, что они очень слабые).
TLS-DHE-RSA-С-AES-256-CBC-SHA
TLS-DHE-RSA-С-КАМЕЛИЕЙ-256-CBC-SHA
TLS-DHE-RSA-С-3DES-EDE-CBC-SHA
TLS-DHE-RSA-С-AES-128-CBC-SHA
TLS-DHE-RSA-С-SEED-CBC-SHA
TLS-DHE-RSA-С-КАМЕЛИЕЙ-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 не отображается в этом списке)
Предполагая, что разница, возможно, только в обозначениях, я попытался заменить часть текста
openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | awk '{print $1}'
выводами sed:
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 приветствуется. поэтому, я предполагаю, что самый безопасный tls-шифр, который я могу использовать с OpenVPN 2.3.2, — это TLS-DHE-RSA-WITH-AES-256-CBC-SHA. но этот ответ датирован ноябрем 2013 года. это все еще лучший выбор? так или иначе, теперь это другой вопрос. но сейчас речь идет о поиске самого безопасного варианта 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 - я пробовал OpenVPN 2.3.4 на Debian 8.3 (стабильный) и 2.3.10 на Debian testing в качестве сервера, и ни один из них не работает, когда tls-cipher указан с набором шифров ECDHE, подключаясь с клиента Windows, работающего с 2.3.10. Пока работают только DHE.