Generare un profilo OpenVPN per l'importazione da parte dell'utente client


40

Esiste una documentazione o una risorsa che descrive come generare e ospitare un profilo da importare per un client OpenVPN? Idealmente vorrei che i miei utenti non dovessero recuperare separatamente un file .zip di .ovpn + certs, estrarlo nella directory corretta, modificare il loro .ovpn, ecc.

Risposte:


40

Apparentemente da OpenVPN 2.1 è stata supportata una configurazione in linea. Ti permette di localizzare i tuoi certificati e le chiavi in ​​un unico file di configurazione. Ma la documentazione su come creare questo file di configurazione non è stata aggiunta fino alla recente versione 2.3.

Vedi la INLINE FILE SUPPORTsezione della pagina man di OpenVPN per maggiori informazioni.

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>

I documenti per il file di configurazione sono gli stessi dei documenti per le opzioni della riga di comando:

OpenVPN consente di posizionare qualsiasi opzione sulla riga di comando o in un file di configurazione. Sebbene tutte le opzioni della riga di comando siano precedute da un trattino doppio ("-"), questo prefisso può essere rimosso quando un'opzione viene inserita in un file di configurazione.


Non è riuscito a farlo funzionare con il client Windows Connect ( openvpn.net/?option=com_content&id=357 ), si lamenta di qualcosa del genere Could not read file C:\\...\[inline]quindi sembra che il client non sia a conoscenza dei certificati in linea (ancora).
Patrick Oscity,

Non so se aiuta, ma ho appena lasciato fuori i valori di configurazione ca, cert, key e tls-auth e funziona.
Ikke,

2
È necessario rimuovere le righe con [inline]. Invece di tls-auth [inline] 1 dovresti usare tls-direction 1
plaisthos

2
Mi dispiace che sia la direzione chiave 1. Ho sbagliato. La mia patch per la pagina man è già stata integrata. Vedi la pagina man 2.3 in FILE IN LINEA: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . L'ho copiato nella sua risposta per renderlo leggibile e accessibile.
plaisthos,

1
@Strubbl: vedi i passaggi 10 e 11 di questo link digitalocean.com/community/tutorials/…
Sai Ramachandran

8

Dalla pagina man OpenVPN 2.3 (È supportato dal 2.1rc-qualcosa):

OpenVPN consente di includere file nella configurazione principale per le opzioni --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secrete --tls-auth.

Ogni file inline avviato dalla riga <option>e terminato dalla riga </option>.

Ecco un esempio di utilizzo di un file inline

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

Quando si utilizza la funzione file inline con --pkcs12il file inline deve essere codificato base64. La codifica di un file .p12 in base64 può essere eseguita ad esempio con OpenSSL eseguendoopenssl base64 -in input.p12

Nota anche l' key-directionopzione:

--key-direction
Modo alternativo di specificare il parametro di direzione opzionale per le opzioni --tls-auth e --secret. Utile quando si utilizzano file incorporati (vedere la sezione sui file incorporati).


3

Questo è stato testato con OpenVPN 2.3.4 Debian 8.9 Server con client Win7.

Passaggio 1. Creare un file contenente i valori predefiniti (lo chiamo inline_client.conf) tutte le impostazioni devono corrispondere ai valori 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

Passaggio 2. Creare il seguente script, regolare i percorsi come richiesto e 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

Passaggio 3. Eseguire MakeInline.shchiederà il nome di un client con cui era necessario aver già creato build-key or build-key-pass. Chiederà un nome per il file ovpn. Il mio standard è ServerToConnectTo.ClientName che produrrà ServerToConnectTo.ClientName.ovpn

Nota: se hai usato build-keyinvece di build-key-passchiunque abbia il possesso di *.ovpnavrà accesso al tuo server senza password!


1

Questo script Python può essere eseguito sul server per generare le chiavi client e un profilo. Lo direi ma non è una mia creazione ed è lungo e potrebbe essere aggiornato periodicamente, e ci sono forchette di esso, quindi è probabile che sarà ricercabile sul web per i futuri viaggiatori del web. Se il collegamento non funziona, prova a cercare "openvpn_gen.py".

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.