Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
linux:openvpn:update_certificates [2025/04/25 00:34] werwolf |
linux:openvpn:update_certificates [2025/04/25 00:45] (текущий) werwolf |
||
|---|---|---|---|
| Строка 24: | Строка 24: | ||
| === Проверка срока действия сертификата === | === Проверка срока действия сертификата === | ||
| <code bash> | <code bash> | ||
| - | openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/client1.crt -noout -dates | + | # Если сертификат встроен в .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> | ||
| Строка 35: | Строка 39: | ||
| Если notAfter в прошлом — сертификат просрочен. | Если notAfter в прошлом — сертификат просрочен. | ||
| - | ==== Генерация нового сертификата ==== | + | === Генерация нового сертификата === |
| 1. Перейдите в папку EasyRSA (обычно /etc/openvpn/easy-rsa/ или /usr/share/easy-rsa/): | 1. Перейдите в папку EasyRSA (обычно /etc/openvpn/easy-rsa/ или /usr/share/easy-rsa/): | ||
| Строка 69: | Строка 73: | ||
| client | client | ||
| dev tun | dev tun | ||
| - | proto udp | + | proto udp4 |
| - | remote your-server-ip 1194 | + | remote 185.17.120.226 1194 |
| resolv-retry infinite | resolv-retry infinite | ||
| nobind | nobind | ||
| + | keepalive 10 120 | ||
| + | comp-lzo | ||
| + | cipher AES-256-GCM | ||
| persist-key | persist-key | ||
| persist-tun | persist-tun | ||
| - | remote-cert-tls server | ||
| - | cipher AES-256-CBC | ||
| verb 3 | verb 3 | ||
| <ca> | <ca> | ||
| Строка 91: | Строка 96: | ||
| 6. Скопируйте client1.ovpn на клиентское устройство. | 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> | ||
| + | |||
| + | |||