Створіть профіль OpenVPN для імпорту користувача клієнта


40

Чи є документація або ресурс, що описує, як створити та розмістити профіль для імпорту клієнта OpenVPN? В ідеалі хотілося б, щоб мої користувачі не потребували окремого завантаження .zip-файлу .ovpn + certs, витягування його у відповідний каталог, налаштування їх .ovpn тощо

Відповіді:


40

Очевидно, оскільки OpenVPN 2.1 підтримується вбудована конфігурація. Дозволяє знаходити ваші серти і ключі в одному файлі конфігурації. Але документація про те, як створити цей файл конфігурації, не була додана до останнього випуску 2.3.

Докладнішу інформацію див. У INLINE FILE SUPPORTрозділі чоловічої сторінки OpenVPN .

client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind

key-direction 1

<ca>
-----BEGIN CERTIFICATE-----
# insert base64 blob from ca.crt
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
# insert base64 blob from client1.crt
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
# insert base64 blob from client1.key
-----END PRIVATE KEY-----
</key>

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
# insert ta.key
-----END OpenVPN Static key V1-----
</tls-auth>

Документи для конфігураційного файлу такі ж, як і документи для параметрів командного рядка:

OpenVPN дозволяє розмістити будь-яку опцію або в командному рядку, або у файлі конфігурації. Хоча всім параметрам командного рядка передує подвійний провідний тире ("-"), цей префікс можна видалити, коли параметр розміщується у файлі конфігурації.


Не вдалося змусити його працювати з клієнтом Windows Connect ( openvpn.net/?option=com_content&id=357 ), він скаржиться на щось подібне, Could not read file C:\\...\[inline]тому здається, що клієнт ще не знає про вбудовані сертифікати (поки що).
Patrick Oscity

Не знаю, чи допомагає це, але я просто залишив значення ca, cert, key та tls-auth config, і це працює.
Іке

2
Ви повинні видалити рядки за допомогою [inline]. Замість tls-auth [inline] 1 слід використовувати tls-напрям 1
plaisthos

2
Вибачте, це ключовий напрям 1. Зрозумів. Мій виправлення на сторінку man вже інтегрований. Дивіться сторінку 2.3 в розділі INLINE FILES: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . Я скопіював її у власну відповідь, щоб зробити її читабельною та доступною.
plaisthos

1
@Strubbl: див. Кроки 10 та 11 цього посилання digitalocean.com/community/tutorials/…
Сай Рамачандран

8

На головній сторінці OpenVPN 2.3 (підтримується з 2.1rc-щось):

OpenVPN дозволяє включати файли в основну конфігурацію для параметрів --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secretі --tls-auth.

Кожен вбудований файл починається рядком <option>і закінчується рядком </option>.

Ось приклад використання вбудованого файлу

<cert>
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
</cert>

При використанні функції вбудованого файлу з --pkcs12вбудованим файлом має бути закодовано base64. Кодування файлу .p12 в base64 можна зробити, наприклад, за допомогою запуску OpenSSLopenssl base64 -in input.p12

Також зверніть увагу на key-directionваріант:

--key-direction
Альтернативний спосіб вказати необов'язковий параметр напрямку для --tls-auth та --secretпараметрів. Корисно при використанні вбудованих файлів (Дивіться розділ про вбудовані файли).


3

Це було перевірено на OpenVPN 2.3.4 Debian 8.9 Server з клієнтами Win7.

Крок 1. Створіть файл, що містить налаштування за замовчуванням (я його називаю inline_client.conf), всі налаштування повинні відповідати вашим значенням server.conf

client
dev tun
proto udp
remote yourserver.xyz 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3
;mute 20

ca [inline]
cert [inline]
key [inline]
tls-auth [inline] 1

Крок 2. Створіть наступний скрипт, відрегулюйте шляхи за потребою та chmod ug+x MakeInline.sh

#!/bin/bash

# Default Variable Declarations

DEFAULT="inline_client.conf"
FILEEXT=".ovpn"
CRT=".crt"
KEY=".key"
CA="ca.crt"
TA="ta.key"
kPath="./keys/"


#Ask for a Client name
echo "Please enter an existing Client Name:"
read NAME

echo "Please enter an Name for the output file"
read ovpnName

#1st Verify that client's Public Key Exists
if [ ! -f $kPath$NAME$CRT ]; then
   echo "[ERROR]: Client Public Key Certificate not found: $kPath$NAME$CRT"
   exit
fi
echo "Client's cert found: $kPath$NAME$CRT"

#Then, verify that there is a private key for that client
if [ ! -f $kPath$NAME$KEY ]; then
   echo "[ERROR]: Client 3des Private Key not found: $kPath$NAME$KEY"
   exit
fi
echo "Client's Private Key found: $kPath$NAME$KEY"

#Confirm the CA public key exists
if [ ! -f $kPath$CA ]; then
   echo "[ERROR]: CA Public Key not found: $kPath$CA"
   exit
fi
echo "CA public Key found: $kPath$CA"

#Confirm the tls-auth ta key file exists
if [ ! -f $kPath$TA ]; then
   echo "[ERROR]: tls-auth Key not found: $kPath$TA"
   exit
fi
echo "tls-auth Private Key found: $kPath$TA"

#Ready to make a new .opvn file - Start by populating with the

cat $DEFAULT > $ovpnName$FILEEXT

#Now, append the CA Public Cert
echo "<ca>" >> $ovpnName$FILEEXT
cat $kPath$CA | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $ovpnName$FILEEXT
echo "</ca>" >> $ovpnName$FILEEXT

#Next append the client Public Cert
echo "<cert>" >> $ovpnName$FILEEXT
cat $kPath$NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $ovpnName$FILEEXT
echo "</cert>" >> $ovpnName$FILEEXT

#Then, append the client Private Key
echo "<key>" >> $ovpnName$FILEEXT
cat $kPath$NAME$KEY >> $ovpnName$FILEEXT
echo "</key>" >> $ovpnName$FILEEXT

#Finally, append the TA Private Key
echo "<tls-auth>" >> $ovpnName$FILEEXT
cat $kPath$TA >> $ovpnName$FILEEXT
echo "</tls-auth>" >> $ovpnName$FILEEXT

echo "Done! $ovpnName$FILEEXT Successfully Created."

#Script written by Eric Jodoin
#Update by Eric Maasdorp 2017-12-16

Крок 3. Виконайте MakeInline.shйого, запитайте ім’я клієнта, з яким вам потрібно було вже створити build-key or build-key-pass. Він запитає ім'я для файлу ovpn. Мій стандарт - ServerToConnectTo.ClientName, який буде виробляти ServerToConnectTo.ClientName.ovpn

Примітка: якщо ви використовували build-keyзамість build-key-passцього, кожен, хто отримає власність *.ovpn, матиме доступ до вашого сервера без пароля!


1

Цей скрипт Python можна запустити на сервері для генерації клієнтських ключів та профілю. Я б наголосив, але це не є моїм створенням і є довгим, і його можна періодично оновлювати, і є його вилки, тому шанси, що це буде можливість пошуку в Інтернеті для майбутніх мандрівників Інтернету. Якщо посилання не працює, спробуйте пошукати "openvpn_gen.py".

https://gist.github.com/Justasic/908ef5f4fa162f15b3b8

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.