Сейчас изучаю более подробно инструменты криптографии и открыл для себя интересный момент, что 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?
- Может у кого есть рабочий конфиг, который уже проверенный под данную задачу?