Générer un profil OpenVPN que l'utilisateur client peut importer

40

Existe-t-il une documentation ou une ressource décrivant comment générer et héberger un profil qu'un client OpenVPN doit importer? Idéalement, j'aimerais que mes utilisateurs ne soient pas obligés d'extraire séparément un fichier .zip du fichier .ovpn +, de l'extraire dans le répertoire approprié, d'ajuster leur .ovpn, etc.

Yang
la source

Réponses:

40

Apparemment, depuis OpenVPN 2.1, une configuration en ligne a été prise en charge. Vous permettant de localiser vos certificats et vos clés dans un seul fichier de configuration. Mais la documentation sur la création de ce fichier de configuration n'a été ajoutée qu'à la dernière version de 2.3.

Consultez la INLINE FILE SUPPORTsection 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>

Les documents du fichier de configuration sont les mêmes que ceux des options de la ligne de commande:

OpenVPN permet de placer n'importe quelle option sur la ligne de commande ou dans un fichier de configuration. Bien que toutes les options de 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.

Zoredache
la source
Impossible de le faire fonctionner avec le client Windows Connect ( openvpn.net/?option=com_content&id=357 ), il se plaint de quelque chose comme Could not read file C:\\...\[inline]cela, de sorte qu'il semble que le client ne connaisse pas (encore) les certificats inline.
Patrick Oscity
Je ne sais pas si ça aide, mais je viens de laisser les valeurs de configuration ca, cert, clé et tls-auth et ça marche.
Ikke
2
Vous devez supprimer les lignes avec [inline]. Au lieu de tls-auth [inline] 1, vous devriez utiliser tls-direction 1
plaisthos
2
Désolé, c'est la direction clé 1. J'ai mélangé ça. Mon correctif à la page de manuel a déjà été intégré. Voir la page de manuel 2.3 sous FICHIERS INLINE: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . Je l'ai copié dans sa propre réponse pour le rendre lisible et accessible.
plaisthos
1
@Strubbl: voir les étapes 10 et 11 de ce lien digitalocean.com/community/tutorials/…
Sai Ramachandran
8

À partir de la page de manuel OpenVPN 2.3 (prise en charge depuis la version 2.1rc):

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

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

Voici un exemple d'utilisation d'un fichier en ligne

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

Lorsque vous utilisez la fonctionnalité de fichier en ligne avec --pkcs12le fichier en ligne, vous devez être codé en base64. Le codage d’un fichier .p12 en base64 peut être effectué, par exemple, avec OpenSSL en exécutantopenssl base64 -in input.p12

Notez également l' key-directionoption:

--key-direction
Autre moyen de spécifier le paramètre de direction facultatif pour les options --tls-auth et --secret. Utile lors de l'utilisation de fichiers en ligne (Voir la section sur les fichiers en ligne).

plaisthos
la source
3

Cela a été testé avec OpenVPN 2.3.4 Debian 8.9 Server avec des clients Win7.

Étape 1. Créez un fichier contenant vos valeurs par défaut (je l’appelle inline_client.conf). Tous les paramètres doivent correspondre à vos valeurs 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, ajustez les chemins selon vos besoins 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écutez-le. MakeInline.shIl vous demandera le nom d’un client que vous deviez avoir déjà créé avecbuild-key or build-key-pass . Il vous demandera un nom pour le fichier ovpn. Mon standard est ServerToConnectTo.ClientName qui produira ServerToConnectTo.ClientName.ovpn

Remarque: si vous utilisez build-keyplutôt build-key-passque quiconque, toute personne qui *.ovpnaura accès à votre ordinateur aura accès à votre serveur sans mot de passe!

Eric Maasdorp
la source
1

Ce script Python peut être exécuté sur le serveur pour générer les clés client et un profil. Je l'avais inséré mais ce n'est pas ma création, il est long et peut être mis à jour périodiquement. Il y a des tas de choses, donc il y a de fortes chances qu'il soit consultable sur le Web pour les futurs voyageurs sur le Web. Si le lien ne fonctionne pas, essayez de rechercher "openvpn_gen.py".

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

dragon788
la source