Создайте профиль OpenVPN для импорта пользователем клиента

40

Есть ли какая-либо документация или ресурс, описывающий, как создать и разместить профиль для клиента OpenVPN для импорта? В идеале, мои пользователи не должны отдельно загружать .zip-файл из сертификатов .ovpn +, извлекать его в соответствующий каталог, настраивать их .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 позволяет разместить любую опцию либо в командной строке, либо в файле конфигурации. Несмотря на то, что всем параметрам командной строки предшествует двойная тире ("-"), этот префикс может быть удален, если параметр помещен в файл конфигурации.

Zoredache
источник
Не удалось заставить его работать с клиентом Windows Connect ( openvpn.net/?option=com_content&id=357 ), он жалуется на что-то вроде этого, Could not read file C:\\...\[inline]поэтому кажется, что клиент не знает о встроенных сертификатах (пока).
Патрик Осцити
Не знаю, помогает ли это, но я просто оставил значения конфигурации ca, cert, key и tls-auth, и это работает.
Ikke
2
Вы должны удалить строки с помощью [inline]. Вместо tls-auth [inline] 1 вы должны использовать tls-direction 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 можно выполнить, например, с помощью OpenSSL, запустивopenssl base64 -in input.p12

Также обратите внимание на key-directionопцию:

--key-direction
Альтернативный способ указания необязательного параметра направления для параметров --tls-auth и --secret. Полезно при использовании встроенных файлов (см. Раздел «Встроенные файлы»).

plaisthos
источник
3

Это было протестировано на сервере OpenVPN 2.3.4 Debian 8.9 с клиентами 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

dragon788
источник