Развертывание CA сервера (EasyRSA)
CA (Certification Authority) = ЦС (Центр Сертификации) = Удостоверяющий центр
В криптографии это сторона, чья честность неоспорима, а public key широко известен. Это компонент, отвечающий за управление криптографическими ключами юзеров.
Ее задача - подтверждать подлинность ключей шифрования с помощью сертификатов электронной подписи. Открытые ключи и др. инфа о юзерах хранится центрами сертификации в виде цифровых сертификатов.
Lets Encrypt - тот же CA.
./easyrsa init-pki
создал директорию инфраструктуры открытых ключей (PKI - Public Key Infrastructure).
Все готово для создания CA - значит, пора создавать пару “секретный ключ и сертификат”.
Конфигурация содержимого сертификата:
Build the CA:
Появится pki/ca.crt
- открытый ключ CA. Он будет использоваться клиентами и серверами для проверки при авторизации. Его нужно будет доставить и на сервер OpenVPN, в нашем случае.
Теперь на CA сервере можно будет подписывать запросы сертификатов.
Подпись запроса серверных сертификатов
Пример
В чем смысл подписи?
Полученный файл
server.crt
содержит открытый ключ шифрования сервера OpenVPN, а также новую подпись от сервера ЦС.
Смысл подписи состоит в том, чтобы сообщить всем, кто доверяет серверу ЦС, что они также могут доверять серверу OpenVPN при подключении к нему.
Подпись запроса клиентских сертификатов
Развертывание VPN сервера (OpenVPN)
У OpenVPN есть 3 вида аутентификации:
- Предустановленный ключ
- Аутентификация по сертификатам
Для шифрования соединения и клиент, и сервер юзают сертификаты - Аутентификация с помощью пары “логин и пароль”
Может использоваться без создания сертификата для клиента, но серверный сертификат всё равно нужен
Буду использовать аутентификацию по сертификатам - способ, который наиболее гибок в настройках.
Здесь EasyRSA нужен чисто для создания запросов.
Генерация запроса на серверный сертификат
Этой командой создадутся файл запроса на серверный сертификат (server.req
) и секретный ключ (server.key
).
Что дальше делать с этим?
Нужно передать этот запрос (
server.req
) на сервер CA, подписать там и забрать сертификат (server.crt
): Подпись запроса серверных сертификатов
P.S. Это еще и безопасно тем, что запрос и подписанный сертификат не являются секретными данными - можно спокойно осуществлять передачу.
TLS Crypt
Для доп. защиты нужно создать доп. секретный ключ для аутентификации и шифрования данных, передаваемых между клиентом и сервером OpenVPN (что и зовется TLS Crypt):
Теперь нужно положить указанные файлы в папку с конфигами OpenVPN (/etc/openvpn/server/):
- серверный сертификат (server.crt)
- секретный ключ сервера (server.key)
- сертификат CA (ca.crt)
- секретный ключ для TLS Crypt (ta.key)
Генерация клиентских сертификатов
После подписи запроса:
Конфигурация OpenVPN и системы (для работы VPN)
Соус
server.conf
:/usr/share/doc/openvpn/examples/sample-config-files/server.conf
Содержимое моего конфига:
Включение IPv4 forwarding (чтобы VPN работал):
Firewall (ufw
):
Usage
Запуск OpenVPN
Клиентские конфиг-файлы (.ovpn
)
Соус client.conf:
/usr/share/doc/openvpn/examples/sample-config-files/client.conf
Мой шаблон клиентского конфига:
Надо будет поменять remote_server_ip
на IP адрес VPN сервера:
На digitalocean предоставили такой скрипт для создания клиентских конфигов (.ovpn файлов):
Usage
Создастся конфиг ~/client-configs/files/SomeClient.ovpn
, который содержит:
- Сертификат CA сервера (
ca.crt
) - Клиентский сертификат (
SomeClient.crt
) - Клиентский секретный ключ (
SomeClient.crt
) - Секретный ключ для TLS Crypt (
ta.key
)
Всё, осталось его доставить на нужное устройство (которое хочет подключится к VPN) и импортировать этот .ovpn
файл в клиентское приложение OpenVPN.
Отзыв сертификатов клиента
Troubleshoot
OpenVPN tls-crypt unwrap error
Описание ошибки
В “ при подключении клиента к нему можно увидеть такое сообщение:
tls-crypt unwrap error: packet authentication failed
TLS Error: tls-crypt unwrapping failed from [AF_INET]<ip-address>:1047
Логгирование включается в
/etc/openvpn/server/server.conf
:log /var/log/openvpn/openvpn.log
Решение
Надо проверить, чтобы
iptables
иufw
не мешали трафику OpenVPN.
Надо проверить клиентский конфиг .ovpn, а именно:
- Чтобы была закомментирована строка:
;tls-crypt ta.key 1
- Чтобы OpenVPN static key был обернут не в
<tls-auth></tls-auth>
, а в<tls-crypt></tls-crypt>
. Наглядно:<tls-crypt> # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 635e6ed65b6dddd5e9d44e8de84dd111 15a131387427a5... -----END OpenVPN Static key V1----- </tls-crypt>
Нераздельная легкая установка OpenVPN + EasyRSA
Соусы: