Genere un perfil de OpenVPN para que el usuario del cliente lo importe

40

¿Existe alguna documentación o recurso que describa cómo generar y alojar un perfil para que un cliente OpenVPN lo importe? Lo ideal sería que mis usuarios no tuvieran que buscar por separado un archivo .zip de los certificados .ovpn +, extraerlo en el directorio adecuado, ajustar su .ovpn, etc.

Yang
fuente

Respuestas:

40

Aparentemente, desde OpenVPN 2.1, se admite una configuración en línea. Permitiéndole localizar sus certificados y claves, todo en un solo archivo de configuración. Pero la documentación sobre cómo crear este archivo de configuración no se agregó hasta la versión reciente de 2.3.

Consulte la INLINE FILE SUPPORTsección de la página de manual de OpenVPN para obtener más información.

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>

Los documentos para el archivo de configuración son los mismos que los documentos para las opciones de línea de comandos:

OpenVPN permite que cualquier opción se coloque en la línea de comando o en un archivo de configuración. Aunque todas las opciones de línea de comando están precedidas por un guión doble ("-"), este prefijo se puede eliminar cuando se coloca una opción en un archivo de configuración.

Zoredache
fuente
No se pudo hacer que funcione con el Cliente de Windows Connect ( openvpn.net/?option=com_content&id=357 ), se queja de algo así, Could not read file C:\\...\[inline]por lo que parece que el cliente aún no conoce los certificados en línea (todavía).
Patrick Oscity 01 de
No sé si ayuda, pero acabo de dejar los valores de configuración ca, cert, key y tls-auth y funciona.
Ikke
2
Debe eliminar las líneas con [en línea]. En lugar de tls-auth [en línea] 1, debe usar tls-direction 1
plaisthos
2
Lo siento, es la dirección clave 1. Lo tengo mezclado. Mi parche para la página de manual ya se ha integrado. Consulte la página de manual 2.3 en ARCHIVOS EN LÍNEA: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . Lo copié en su propia respuesta para que sea legible y accesible.
plaisthos 01 de
1
@Strubbl: vea los Pasos 10 y 11 de este enlace digitalocean.com/community/tutorials/…
Sai Ramachandran
8

Desde la página de manual de OpenVPN 2.3 (es compatible desde 2.1rc-something):

OpenVPN permite incluir archivos en la configuración principal para las opciones --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secrety --tls-auth.

Cada archivo en línea comenzó por la línea <option>y terminó por la línea </option>.

Aquí hay un ejemplo de uso de archivos en línea

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

Cuando se utiliza la función de archivo en línea con --pkcs12el archivo en línea, debe codificarse en base64. La codificación de un archivo .p12 en base64 se puede hacer, por ejemplo, con OpenSSL ejecutandoopenssl base64 -in input.p12

También tenga en cuenta la key-directionopción:

--key-direction
Forma alternativa de especificar el parámetro de dirección opcional para las opciones --tls-auth y --secret. Útil cuando se utilizan archivos en línea (consulte la sección sobre archivos en línea).

plaisthos
fuente
3

Esto ha sido probado con OpenVPN 2.3.4 Debian 8.9 Server con clientes Win7.

Paso 1. Cree un archivo que contenga sus valores predeterminados (lo llamo inline_client.conf) todas las configuraciones deben coincidir con los valores de 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

Paso 2. Cree el siguiente script, ajuste las rutas según sea necesario y 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

Paso 3. Ejecútelo MakeInline.sh, le pedirá el nombre de un cliente con el que ya tenía que haber creado build-key or build-key-pass. Le pedirá un nombre para el archivo ovpn. Mi estándar es ServerToConnectTo.ClientName que producirá ServerToConnectTo.ClientName.ovpn

Nota: si usaste en build-keylugar de build-key-passcualquiera, ¡cualquiera que se apodere del *.ovpntendrá acceso a tu servidor sin contraseña!

Eric Maasdorp
fuente
1

Este script de Python se puede ejecutar en el servidor para generar las claves del cliente y un perfil. Lo incluiría en línea, pero no es mi creación, es largo y puede actualizarse periódicamente, y hay tenedores, por lo que es probable que se pueda buscar en la web para futuros viajeros. Si el enlace no funciona, intente buscar "openvpn_gen.py".

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

dragon788
fuente