Generieren Sie ein OpenVPN-Profil, das der Client-Benutzer importieren kann

40

Gibt es eine Dokumentation oder eine Ressource, die beschreibt, wie ein Profil für einen OpenVPN-Client zum Importieren erstellt und gehostet wird? Im Idealfall möchten meine Benutzer, dass sie eine .zip-Datei der .ovpn + -Zertifikate nicht separat abrufen, in das richtige Verzeichnis extrahieren, ihre .ovpn-Datei anpassen usw.

Yang
quelle

Antworten:

40

Offenbar wurde seit OpenVPN 2.1 eine Inline-Konfiguration unterstützt. So können Sie Ihre Zertifikate und Schlüssel in einer einzigen Konfigurationsdatei suchen. Die Dokumentation zum Erstellen dieser Konfigurationsdatei wurde jedoch erst in der letzten Version 2.3 hinzugefügt.

Weitere Informationen finden Sie im INLINE FILE SUPPORTAbschnitt der OpenVPN-Manpage .

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>

Die Dokumente für die Konfigurationsdatei stimmen mit den Dokumenten für die Befehlszeilenoptionen überein:

Mit OpenVPN kann jede Option entweder in der Befehlszeile oder in einer Konfigurationsdatei platziert werden. Obwohl allen Befehlszeilenoptionen ein doppelter Bindestrich ("-") vorangestellt ist, kann dieses Präfix entfernt werden, wenn eine Option in eine Konfigurationsdatei eingefügt wird.

Zoredache
quelle
Es konnte nicht mit dem Windows Connect-Client ( openvpn.net/?option=com_content&id=357 ) verwendet werden. Es beschwert sich über etwas, Could not read file C:\\...\[inline]sodass der Client (noch) nichts über Inline-Zertifikate zu wissen scheint.
Patrick Oscity
Ich weiß nicht, ob es hilft, aber ich habe die Konfigurationswerte ca, cert, key und tls-auth weggelassen und es funktioniert.
Ikke
2
Sie sollten die Zeilen mit [inline] entfernen. Anstelle von tls-auth [inline] 1 solltest du tls-direction 1
plaisthos 30.09.13
2
Tut mir leid, es ist Schlüsselrichtung 1. Hab das durcheinander gebracht. Mein Patch zur Manpage wurde bereits integriert. Siehe die Manpage 2.3 unter INLINE FILES: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . Ich habe es in seine eigene Antwort kopiert, um es lesbar und zugänglich zu machen.
Plaisthos
1
@ Strubbl: siehe Schritte 10 und 11 dieses Links digitalocean.com/community/tutorials/…
Sai Ramachandran
8

Aus der OpenVPN 2.3- Manpage (wird seit 2.1rc-something unterstützt):

OpenVPN ermöglicht die Aufnahme von Dateien in die Hauptkonfiguration für die Optionen --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secretund --tls-auth.

Jede Inline-Datei beginnt mit der Zeile <option>und endet mit der Zeile </option>.

Hier ist ein Beispiel für die Verwendung einer Inline-Datei

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

Bei Verwendung der Inline-Datei-Funktion muss --pkcs12die Inline-Datei base64-codiert sein. Das Codieren einer .p12-Datei in base64 kann zum Beispiel mit OpenSSL ausgeführt werdenopenssl base64 -in input.p12

Beachten Sie auch die key-directionOption:

--key-direction
Alternative Methode zur Angabe des optionalen Richtungsparameters für die Optionen --tls-auth und --secret. Nützlich bei der Verwendung von Inline-Dateien (siehe Abschnitt zu Inline-Dateien).

plaisthos
quelle
3

Dies wurde mit OpenVPN 2.3.4 Debian 8.9 Server mit Win7-Clients getestet.

Schritt 1. Erstellen Sie eine Datei mit Ihren Standardeinstellungen (ich nenne sie inline_client.conf). Alle Einstellungen müssen mit Ihren server.conf-Werten übereinstimmen

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

Schritt 2. Erstellen Sie das folgende Skript, passen Sie die Pfade nach Bedarf an und 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

Schritt 3. Beim Ausführen werden MakeInline.shSie nach dem Namen eines Clients gefragt, mit dem Sie bereits erstellt haben müssen build-key or build-key-pass. Es wird nach einem Namen für die OVPN-Datei gefragt. Mein Standard ist ServerToConnectTo.ClientName, der produzieren wird ServerToConnectTo.ClientName.ovpn

Hinweis: Wenn Sie build-keyanstelle von verwendet werden, build-key-passhat jeder, der *.ovpnZugriff auf die hat, ohne Passwort Zugriff auf Ihren Server!

Eric Maasdorp
quelle
1

Dieses Python-Skript kann auf dem Server ausgeführt werden, um die Client-Schlüssel und ein Profil zu generieren. Ich würde es einbinden, aber es ist nicht meine Kreation und es ist lang und wird möglicherweise regelmäßig aktualisiert. Es gibt Gabeln dafür, sodass die Wahrscheinlichkeit groß ist, dass es im Web für zukünftige Web-Reisende durchsuchbar ist. Wenn der Link nicht funktioniert, suchen Sie nach "openvpn_gen.py".

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

dragon788
quelle