Назад | Перейти на главную страницу

openvpn, опция tls-cipher не работает, нет общего шифра

экспериментируя с настройкой 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/Harpting и теперь понял, что 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-С-КАМЕЛИЕЙ-256-CBC-SHA

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

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

TLS-DHE-RSA-WITH-SEED-CBC-SHA

TLS-DHE-RSA-С-КАМЕЛИЕЙ-128-CBC-SHA

TLS-DHE-RSA-WITH-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. Итак, я предполагаю, что самый безопасный tls-шифр, который я могу использовать с openvpn 2.3.2, - это TLS-DHE-RSA-WITH-AES-256-CBC-SHA. но этот ответ от ноября 2013 года. Это все еще лучший выбор? как-то это уже другой вопрос. но это все о поиске самого безопасного варианта tls-cipher.

редактировать 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

но это беспорядок, не так ли? и так работает только в том случае, если список имен шифров не увеличивается.

извините, если "вопрос" может сбить с толку ... прокомментируйте, пожалуйста, большое спасибо, если вы хотя бы нашли время, чтобы прочитать это!

Я еще не думаю, что OpenVPN поддерживает ECDHE - я пробовал OpenVPN 2.3.4 на Debian 8.3 (стабильный) и 2.3.10 на Debian, тестируемом в качестве сервера, и ни один из них не работает, если tls-cipher указан с помощью набора шифров ECDHE, подключаясь из Клиент Windows под управлением 2.3.10. Пока работают только DHE.