47 votes

Générer un profil OpenVPN à importer pour l'utilisateur client

Existe-t-il une documentation ou une ressource décrivant comment générer et héberger un profil à importer par un client OpenVPN ? Idéalement, j'aimerais que mes utilisateurs n'aient pas à récupérer séparément un fichier .zip contenant le .ovpn + les certificats, à l'extraire dans le répertoire approprié, à modifier leur .ovpn, etc.

45voto

jammus Points 1796

Apparemment, depuis OpenVPN 2.1, une configuration en ligne est supportée. Cela vous permet de localiser vos certs et vos clés dans un seul fichier de configuration. Mais la documentation sur la façon de créer ce fichier de configuration n'a pas été ajoutée jusqu'à la récente version 2.3.

Voir le INLINE FILE SUPPORT section de la page de manuel OpenVPN pour plus d'informations.

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>

La documentation du fichier de configuration est la même que celle des options de la ligne de commande :

OpenVPN permet de placer n'importe quelle option soit sur la ligne de commande, soit dans un fichier de configuration. Bien que toutes les options de la ligne de commande soient précédées d'un double tiret ("--"), ce préfixe peut être supprimé lorsqu'une option est placée dans un fichier de configuration.

10voto

curious_cat Points 263

Depuis la version 2.3 d'OpenVPN page de manuel (Il est supporté depuis la version 2.1rc-quelque chose) :

OpenVPN permet d'inclure des fichiers dans la configuration principale pour l'option --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secret y --tls-auth options.

Chaque fichier en ligne commencé par la ligne <option> et se termine par la ligne </option> .

Voici un exemple de fichier en ligne usa

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

Lors de l'utilisation de la fonction de fichier en ligne avec --pkcs12 le fichier en ligne doit être encodé en base64. L'encodage d'un fichier .p12 en base64 peut être effectué par exemple avec OpenSSL en lançant openssl base64 -in input.p12

Notez également que le key-direction option :

--key-direction
Autre façon de spécifier le paramètre facultatif de direction pour l'option --tls-auth y --secret options. Utile lors de l'utilisation de (voir la section sur les fichiers en ligne).

5voto

Eric Maasdorp Points 41

Ceci a été testé avec OpenVPN 2.3.4 Serveur Debian 8.9 avec clients Win7.

Étape 1. Créez un fichier contenant vos paramètres par défaut (je l'appelle inline_client.conf) tous les paramètres doivent correspondre aux valeurs de votre 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

Étape 2. Créez le script suivant, modifiez les chemins d'accès si nécessaire et 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

Étape 3. Exécuter MakeInline.sh il vous demandera le nom d'un client que vous devez avoir déjà créé avec build-key or build-key-pass . Il vous demandera un nom pour le fichier ovpn. Mon standard est ServerToConnectTo.ClientName qui produira ServerToConnectTo.ClientName.ovpn

Note : si vous avez utilisé build-key au lieu de build-key-pass alors toute personne qui met la main sur le *.ovpn aura accès à votre serveur sans mot de passe !

1voto

dragon788 Points 706

Ce script Python peut être exécuté sur le serveur pour générer les clés du client et un profil. Je le mettrais bien en ligne mais ce n'est pas ma création, il est long et peut être mis à jour périodiquement, et il y a des forks de ce script, il y a donc de fortes chances qu'il soit consultable sur le web pour les futurs voyageurs du web. Si le lien ne fonctionne pas, essayez de chercher "openvpn_gen.py".

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X