экспериментируя с настройкой 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.