Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
linux:openvpn:update_certificates [2025/04/25 00:28] werwolf |
linux:openvpn:update_certificates [2025/04/25 00:45] (текущий) werwolf |
||
|---|---|---|---|
| Строка 19: | Строка 19: | ||
| * inux: sudo apt install openvpn → sudo openvpn client.ovpn | * inux: sudo apt install openvpn → sudo openvpn client.ovpn | ||
| * Android/iOS: Приложение OpenVPN Connect (импортируйте файл). | * Android/iOS: Приложение OpenVPN Connect (импортируйте файл). | ||
| + | |||
| + | ==== Если сертификат OpenVPN протух (истек срок действия), его нужно перегенерировать ==== | ||
| + | |||
| + | === Проверка срока действия сертификата === | ||
| + | <code bash> | ||
| + | # Если сертификат встроен в .ovpn: | ||
| + | grep -A 20 "<cert>" /etc/openvpn/client/client.ovpn | openssl x509 -noout -dates | ||
| + | |||
| + | # Если сертификат лежит отдельно (например, client.crt): | ||
| + | openssl x509 -in /etc/openvpn/client/client.crt -noout -dates | ||
| + | </code> | ||
| + | |||
| + | Вывод: | ||
| + | <code bash> | ||
| + | notBefore=Apr 24 00:00:00 2023 GMT | ||
| + | notAfter=Apr 24 00:00:00 2024 GMT | ||
| + | </code> | ||
| + | |||
| + | Если notAfter в прошлом — сертификат просрочен. | ||
| + | |||
| + | === Генерация нового сертификата === | ||
| + | |||
| + | 1. Перейдите в папку EasyRSA (обычно /etc/openvpn/easy-rsa/ или /usr/share/easy-rsa/): | ||
| + | |||
| + | <code bash> | ||
| + | cd /etc/openvpn/easy-rsa/ | ||
| + | </code> | ||
| + | |||
| + | 2. Инициализируйте PKI (если нужно) и обновите vars: | ||
| + | <code bash> | ||
| + | ./easyrsa init-pki | ||
| + | source vars # (если файл есть) | ||
| + | </code> | ||
| + | |||
| + | 3. Сгенерируйте новый сертификат клиента (замените client1 на имя клиента): | ||
| + | |||
| + | <code bash> | ||
| + | ./easyrsa build-client-full client1 nopass # без пароля | ||
| + | # или с паролем: | ||
| + | ./easyrsa build-client-full client1 | ||
| + | </code> | ||
| + | |||
| + | 4. Новые файлы появятся в: | ||
| + | |||
| + | * Сертификат: /etc/openvpn/easy-rsa/pki/issued/client1.crt | ||
| + | * Ключ: /etc/openvpn/easy-rsa/pki/private/client1.key | ||
| + | * CA-сертификат: /etc/openvpn/easy-rsa/pki/ca.crt | ||
| + | |||
| + | 5. Соберите новый .ovpn-файл: | ||
| + | |||
| + | <code bash> | ||
| + | cat > /etc/openvpn/client1.ovpn <<EOF | ||
| + | client | ||
| + | dev tun | ||
| + | proto udp4 | ||
| + | remote 185.17.120.226 1194 | ||
| + | resolv-retry infinite | ||
| + | nobind | ||
| + | keepalive 10 120 | ||
| + | comp-lzo | ||
| + | cipher AES-256-GCM | ||
| + | persist-key | ||
| + | persist-tun | ||
| + | verb 3 | ||
| + | <ca> | ||
| + | $(cat /etc/openvpn/easy-rsa/pki/ca.crt) | ||
| + | </ca> | ||
| + | <cert> | ||
| + | $(cat /etc/openvpn/easy-rsa/pki/issued/client1.crt) | ||
| + | </cert> | ||
| + | <key> | ||
| + | $(cat /etc/openvpn/easy-rsa/pki/private/client1.key) | ||
| + | </key> | ||
| + | EOF | ||
| + | </code> | ||
| + | |||
| + | 6. Скопируйте client1.ovpn на клиентское устройство. | ||
| + | |||
| + | === Пример скрипта make_ovpn.sh === | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | |||
| + | CLIENT_NAME="client1" # Имя клиента | ||
| + | SERVER_IP="123.123.123.123" # IP сервера | ||
| + | PORT="1194" # Порт OpenVPN | ||
| + | |||
| + | # Переходим в папку EasyRSA | ||
| + | cd /etc/openvpn/easy-rsa/ | ||
| + | |||
| + | # Генерируем сертификат (если ещё не создан) | ||
| + | ./easyrsa build-client-full $CLIENT_NAME nopass | ||
| + | |||
| + | # Создаём .ovpn-файл | ||
| + | cat > /etc/openvpn/client/$CLIENT_NAME.ovpn <<EOF | ||
| + | client | ||
| + | dev tun | ||
| + | proto udp | ||
| + | remote $SERVER_IP $PORT | ||
| + | resolv-retry infinite | ||
| + | nobind | ||
| + | persist-key | ||
| + | persist-tun | ||
| + | remote-cert-tls server | ||
| + | cipher AES-256-CBC | ||
| + | auth SHA256 | ||
| + | comp-lzo no | ||
| + | verb 3 | ||
| + | |||
| + | <ca> | ||
| + | $(cat pki/ca.crt) | ||
| + | </ca> | ||
| + | |||
| + | <cert> | ||
| + | $(cat pki/issued/$CLIENT_NAME.crt) | ||
| + | </cert> | ||
| + | |||
| + | <key> | ||
| + | $(cat pki/private/$CLIENT_NAME.key) | ||
| + | </key> | ||
| + | |||
| + | tls-crypt /etc/openvpn/server/tls-crypt.key # Если используется tls-crypt | ||
| + | EOF | ||
| + | |||
| + | echo "Файл /etc/openvpn/client/$CLIENT_NAME.ovpn создан!" | ||
| + | </code> | ||
| + | |||
| + | Как запустить? | ||
| + | <code bash> | ||
| + | chmod +x make_ovpn.sh | ||
| + | sudo ./make_ovpn.sh | ||
| + | </code> | ||
| + | |||
| + | После этого /etc/openvpn/client/client1.ovpn будет готов к использованию. | ||
| + | |||
| + | =====Как перевыпустить сертификат сервера OpenVPN ===== | ||
| + | |||
| + | Если у вас есть рабочий CA (ca.crt и ca.key), но нужно перевыпустить сертификат сервера (например, из-за истечения срока действия или компрометации ключа), выполните следующие шаги: | ||
| + | |||
| + | 1. Перейдите в папку Easy-RSA | ||
| + | <code bash> | ||
| + | cd /etc/openvpn/easy-rsa/ # или /usr/share/easy-rsa/ | ||
| + | </code> | ||
| + | 2. Отзовите старый сертификат сервера (если нужно) | ||
| + | <code bash> | ||
| + | ./easyrsa revoke "server" # "server" — имя сертификата (обычно `server`) | ||
| + | ./easyrsa gen-crl # Обновить список отозванных сертификатов (CRL) | ||
| + | </code> | ||
| + | → Это нужно, если старый сертификат был скомпрометирован (если просто истёк срок — можно пропустить). | ||
| + | |||
| + | 3. Перевыпустите сертификат сервера | ||
| + | <code bash> | ||
| + | ./easyrsa build-server-full "server" nopass # "server" — имя сертификата | ||
| + | </code> | ||
| + | → Если нужен пароль для сертификата, уберите nopass. | ||
| + | → Новые файлы создадутся в: | ||
| + | * pki/issued/server.crt — новый сертификат, | ||
| + | * pki/private/server.key — новый приватный ключ. | ||
| + | |||
| + | 4. Обновите конфиг OpenVPN | ||
| + | |||
| + | Замените старые сертификаты в /etc/openvpn/server.conf (или где лежит ваш конфиг): | ||
| + | |||
| + | <code bash> | ||
| + | cert /etc/openvpn/easy-rsa/pki/issued/server.crt | ||
| + | key /etc/openvpn/easy-rsa/pki/private/server.key | ||
| + | </code> | ||
| + | |||
| + | Или, если сертификаты встроены прямо в .conf: | ||
| + | <code bash> | ||
| + | sudo nano /etc/openvpn/server.conf | ||
| + | </code> | ||
| + | |||
| + | Замените блоки: | ||
| + | <code bash> | ||
| + | <cert> | ||
| + | -----BEGIN CERTIFICATE----- | ||
| + | ... (новый сертификат из pki/issued/server.crt) | ||
| + | -----END CERTIFICATE----- | ||
| + | </cert> | ||
| + | |||
| + | <key> | ||
| + | -----BEGIN PRIVATE KEY----- | ||
| + | ... (новый ключ из pki/private/server.key) | ||
| + | -----END PRIVATE KEY----- | ||
| + | </key> | ||
| + | </code> | ||
| + | |||
| + | 5. Перезапустите OpenVPN | ||
| + | <code bash> | ||
| + | sudo systemctl restart openvpn-server@server # Для systemd | ||
| + | # ИЛИ | ||
| + | sudo service openvpn restart # Для SysVinit | ||
| + | </code> | ||
| + | |||
| + | 6. Проверьте, что сертификат обновлён | ||
| + | <code bash> | ||
| + | openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/server.crt -noout -dates | ||
| + | </code> | ||
| + | Вывод должен показывать актуальные даты: | ||
| + | |||
| + | <code bash> | ||
| + | notBefore=Jun 25 00:00:00 2024 GMT | ||
| + | notAfter=Jun 25 00:00:00 2025 GMT | ||
| + | </code> | ||
| + | |||
| + | |||