Есть ли какая-либо документация или ресурсы, описывающие, как сгенерировать и разместить профиль для импорта клиентом OpenVPN? В идеале мне хотелось бы, чтобы моим пользователям не приходилось отдельно загружать ZIP-файл с сертификатами .ovpn +, извлекать его в соответствующий каталог, настраивать свои .ovpn и т. Д.
По-видимому, начиная с 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 позволяет разместить любую опцию либо в командной строке, либо в файле конфигурации. Хотя всем параметрам командной строки предшествует двойной дефис («-»), этот префикс можно удалить, если параметр помещен в файл конфигурации.
Из OpenVPN 2.3 страница руководства (Поддерживается начиная с версии 2.1rc-something):
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
параметры. Полезно при использовании встроенных файлов (см. Раздел о встроенных файлах).
Это было протестировано с 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
будет доступ к вашему серверу без пароля!
Этот сценарий Python можно запустить на сервере для генерации клиентских ключей и профиля. Я бы встроил его, но это не мое творение, он длинный и может периодически обновляться, и есть его разветвления, поэтому есть вероятность, что он будет доступен для поиска в Интернете для будущих путешественников. Если ссылка не работает, попробуйте поискать "openvpn_gen.py".