LINUX.ORG.RU
ФорумAdmin

OpenVPN настройка Elliptic curve

 ,


4

6

Сейчас изучаю более подробно инструменты криптографии и открыл для себя интересный момент, что OpenVPN можно настроить на использования ECC. Перерыв много различных форумов, мануалов и разумеется оф.документацию так и не понял как все такие настроить. Если мы используем стандартные средства и версии доступные по умолчанию(использую ОС Debian), то получаем TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA(можно и больше), тут все понятно, настраивается просто. Для начала хочу настроить обмен ключами не по DHE, а по ECDH, а потом уже заменить RSA на ECDSA. Пытался настроить на версиях 2.2.х, 2.3.х, позже понял, что ECDH официально поддерживается с версии 2.4.0. Ну это не проблема, скачал и собрал, старую удалил, в итоге получили последнюю версию

root@hots:/etc/openvpn# openvpn --version
OpenVPN 2.3_git i686-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [IPv6] built on Oct  7 2016
library versions: OpenSSL 1.0.1t  3 May 2016, LZO 2.06
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_iproute2=no enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no enable_pf=yes enable_pkcs11=no enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no enable_werror=no enable_win32_dll=yes enable_x509_alt_username=no with_crypto_library=openssl with_gnu_ld=yes with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no
root@host:/etc/openvpn#
Теперь дошло дело до генерации ключей и составления конфиг файла. С генерацией СА и ключей для сервера и клиента думаю разберусь, там ни чего сложного и я примерно представляю как и что там делать, а вот dh, несколько раз перечитывал, так и не понял последовательность действий.Для начала получается надо генерировать сам ключ, генерирую так
openssl ecparam -out ec.key -name sect571r1 -genkey
Можно достать публичный, так и не понял зачем
openssl ec -in ec.key -pubout -out ec.pubkey
Потом надо этот ключ указать в конфиге насколько я понимаю. Так и не понял куда адрес писать, но начать надо с следующего
#говорим, что не использовать стандартный DHE
dh none 
#говорим, что используем кривую sect571r1(по идеи в этом параметре надо) 
ecdh-curve sect571r1
#показываем какие алгоритмы используем
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA
В итоге конфиг получился такой(не работает)
port 1111
proto tcp
dev tun
tls-server
pkcs12  /etc/openvpn/rez/key.p12
#dh /etc/openvpn/serv/dh1024.pem
#dh /etc/openvpn/ec.pem
dh none
#ecdh sect571r1 /etc/openvpn/ec.key
#ecdh sect571r1
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA
#tls-cipher ECDHE-ECDSA-AES256-GCM-SHA384
ecdh-curve sect571r1

server 192.168.102.0 255.255.255.0
keepalive 10 120
#comp-lzo
persist-key
persist-tun
push "route 192.168.102.0 255.255.255.0"
status /var/log/openvpn-status_1.log
log /var/log/openvpn_1.log
cipher AES-256-CBC
push "redirect-gateway"
push "dhcp-option DNS 8.8.8.8"
askpass /etc/openvpn/serv.pw

Подскажите, если кто настраивал:

  • Куда именно прописывать путь к ключу ec.key?
  • Может у кого есть рабочий конфиг, который уже проверенный под данную задачу?

Ответ на: комментарий от Harald

Опять же я не математик, я не могу этого утверждать какие алгоритмы на сколько криптостойкие. Просто тема интересная хочу для общего развития знать, кто знает может в будущем начальство попадется придирчивое, скажет что RSA дыра сейчас любой школьник может организовать mitm и имея достаточно мощности и необходимое количества трафика расшифровать его пару дней и что мне на это ответить) К тому же не раз мне попадались статьи, вроде даже на хабре видел, что RSA 1024 бита уже не такой и стойкий ключ на сегодняшний день, когда-то в 9х году может быть. Поэтому решил попробовать. Что неужели ни кто не пробовал????

AnonimS ()
Ответ на: комментарий от AnonimS

Есть мнение, что алгоритмы на эллиптических кривых сложнее в реализации, и поэтому там легче допустить какую-нибудь фатальную ошибку, понижающую криптостойкость. А ещё RSA и DH более проверенные временем решения.

вроде даже на хабре видел, что RSA 1024 бита уже не такой и стойкий ключ на сегодняшний день,

поставь 4096

Harald ★★★★★ ()
Ответ на: комментарий от Harald

у алгоритмов на эллиптических кривых есть преимущество в плане меньшей вычислительной сложности, но это имеет значение только во время установки соединения

Harald ★★★★★ ()
Ответ на: комментарий от Harald

Да это я уже изучил. Я хочу напомнить, что задача получить опыт и знания, просто чтобы это уметь и зафиксировать у себя в блокноте. А то что можно поставить RSA 4096 бита, я и так это делаю и у DHE, и клиентские, и серверный только 4096 бита, если сравнить с ECC, то это равносильно длине почти 512 битам + преимущества по скорости. В плане проверенности DHA-RSA конечно в большинстве случаев используется, хотя если мы говорим вообще про сертификаты, то например yandex использует ECC 256bit и обмениваются по ECDH, а кривая P256, так что кто его знает, но думаю что скоро алгоритмы на ECC наберут оборот.

AnonimS ()
Ответ на: комментарий от Harald

Есть мнение, что алгоритмы на эллиптических кривых сложнее в реализации, и поэтому там легче допустить какую-нибудь фатальную ошибку

Например?

AnonimS ()
Ответ на: комментарий от rumgot

Вроде разобрался, дело в ключах, видимо openvpn смотрит какие ключи и от этого пишет какой алгоритм, сгенерировал все серверные и клиентские ключи ECDSA и увидел то что необходимо:

Control Channel: TLSv1.2, cipher TLSv1/SSLv3 ECDHE-ECDSA-AES256-GCM-SHA384

Для тех кто будет пробовать, вот 100% рабочие конфиги:

Клиент

client
remote ip 188
proto tcp
dev tun
keepalive 10 120
persist-key
persist-tun
auth-nocache SHA1
resolv-retry infinite 
#pkcs12 "C:\\Program Files\\OpenVPN\\config\\client-singl.p12"
#pkcs12 "C:\\Program Files\\OpenVPN\\config\\ClientRSA.p12"
pkcs12 "C:\\Program Files\\OpenVPN\\config\\ClientECC.p12"
#tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
cipher AES-256-CBC
status "C:\\Program Files\\OpenVPN\\log\\USA\\openvpn-status.log"
log "C:\\Program Files\\OpenVPN\\log\\USA\\openvpn.log"
verb 3

Сервер

port 188
proto tcp
dev tun
tls-server
#pkcs12  /etc/openvpn/rez/64-79-99-139.p12

#pkcs12  /etc/openvpn/key_test/serverRSA.p12
pkcs12  /etc/openvpn/key_test/serverECC_2.p12

dh /etc/openvpn/serv/dh1024.pem
#dh /etc/openvpn/ec.pem
#dh none
#ecdh sect571r1 /etc/openvpn/ec.key
#ecdh sect571r1
#tls-cipher TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA
#tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
#tls-cipher ECDHE-ECDSA-AES256-GCM-SHA384
#ecdh-curve secp256r1

server 192.168.102.0 255.255.255.0
keepalive 10 120
#comp-lzo
persist-key
persist-tun
push "route 192.168.102.0 255.255.255.0"
status /var/log/openvpn-status_1.log
log /var/log/openvpn_1.log
cipher AES-256-CBC
push "redirect-gateway"
push "dhcp-option DNS 8.8.8.8"
askpass /etc/openvpn/server.pw

AnonimS ()
9 марта 2017 г.
Ответ на: комментарий от AnonimS

ECDSA

«сгенерировал все серверные и клиентские ключи ECDSA и увидел то что» Как это сделать? Поделитесь опытом пожалуйста. Меня тоже интересует openvpn with ECC

vlad_mir ()
Ответ на: ECDSA от vlad_mir

Re: ECDSA

Это было полгода назад, я уже и забыл что там и как)) Ну на вскидку скажу, что я генерировал сертификаты через центр сертификации ejbca, через командную строку, там все просто ставишь какую кривую тебе надо и в 3 этапа генерируешь сертификат сервера по этой кривой и клиента тоже по этой кривой, потом это все деле скармливаешь openvpn'у и конектишся, и в логах клиента должен увидеть, что шифрование ECDSA и алгоритм обмена ключами EDH, вроде так..В то время активно изучал bash и все это дело автоматизировал, там даешь скрипту какой будет vpn(связка 2,3 и более серверов), логин пароль root'а от каждого сервера и скрипт все делает и дает тебе конфиг, скрипт громозкий конечно получился, с логами и тд, потом забросил это дело и все осталось лежать в коробочке с магнитами)

AnonimS ()
Ответ на: Re: ECDSA от AnonimS

Мне удалось все сделать,создать ключи и сертификаты,но оказалось айфон не поддерживает элипптические кривые. ;((

vlad_mir ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.