CA (Certification Authority) = ЦС (Центр Сертификации) = Удостоверяющий центр
В криптографии это сторона, чья честность неоспорима, а public key широко известен. Это компонент, отвечающий за управление криптографическими ключами юзеров.
Ее задача - подтверждать подлинность ключей шифрования с помощью сертификатов электронной подписи. Открытые ключи и др. инфа о юзерах хранится центрами сертификации в виде цифровых сертификатов. Lets Encrypt - тот же CA.
./easyrsa init-pki создал директорию инфраструктуры открытых ключей (PKI - Public Key Infrastructure).
Все готово для создания CA - значит, пора создавать пару “секретный ключ и сертификат”.
./easyrsa build-ca# Нужно будет ввести passphrase, остальная инфа возьмется из pki/vars
Появится pki/ca.crt - открытый ключ CA. Он будет использоваться клиентами и серверами для проверки при авторизации. Его нужно будет доставить и на сервер OpenVPN, в нашем случае.
Теперь на CA сервере можно будет подписывать запросы сертификатов.
Подпись запроса серверных сертификатов
./easyrsa sign-req server server# Подпись request-а на серверный сертификат сервера "server"
Пример
# Передача на CA сервер запроса, подпись там и возврат на VPN серверscp -P <port> pki/reqs/server.req test@test:/home/test/easy-rsa/pki/reqs/ssh test@test -p <port> "cd ${HOME}/easy-rsa && ./easyrsa sign-req server server"scp -P <port> test@test:"${HOME}/easy-rsa/pki/issued/server.crt" .
В чем смысл подписи?
Полученный файл server.crt содержит открытый ключ шифрования сервера OpenVPN, а также новую подпись от сервера ЦС.
Смысл подписи состоит в том, чтобы сообщить всем, кто доверяет серверу ЦС, что они также могут доверять серверу OpenVPN при подключении к нему.
Этой командой создадутся файл запроса на серверный сертификат (server.req) и секретный ключ (server.key).
Что дальше делать с этим?
Нужно передать этот запрос (server.req) на сервер CA, подписать там и забрать сертификат (server.crt): Подпись запроса серверных сертификатов P.S. Это еще и безопасно тем, что запрос и подписанный сертификат не являются секретными данными - можно спокойно осуществлять передачу.
TLS Crypt
Для доп. защиты нужно создать доп. секретный ключ для аутентификации и шифрования данных, передаваемых между клиентом и сервером OpenVPN (что и зовется TLS Crypt):
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.confsudo sysctl -p
Firewall (ufw):
sudo ufw allow 1194/udpsudo ufw reload
openvpn-iptables.sh
#!/bin/bash -ETH="$1"PROTO="$2"PORT="$3"# OpenVPNiptables \ -A INPUT -i "$ETH" -m state --state NEW \ -p "$PROTO" --dPORT "$PORT" -j ACCEPT# Allow TUN interface connections to OpenVPN serveriptables -A INPUT -i tun+ -j ACCEPT# Allow TUN interface connections to be forwarded through other interfacesiptables -A FORWARD -i tun+ -j ACCEPTiptables \ -A FORWARD -i tun+ -o "$ETH" \ -m state --state RELATED,ESTABLISHED -j ACCEPTiptables \ -A FORWARD -i "$ETH" -o tun+ \ -m state --state RELATED,ESTABLISHED -j ACCEPT# NAT the VPN client traffic to the internetiptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o "$ETH" -j MASQUERADE