Generați un profil OpenVPN pentru ca utilizatorul client să îl importe (Administrarea sistemului, Openvpn)

Yang a intrebat.

Există vreo documentație sau resursă care descrie cum să genereze și să găzduiască un profil pentru ca un client OpenVPN să importe? În mod ideal, aș dori ca utilizatorii mei să nu fie nevoiți să extragă separat un fișier .zip cu .ovpn + certificate, să îl extragă în directorul corespunzător, să își ajusteze fișierul .ovpn etc.

4 răspunsuri
Zoredache

Se pare că de la OpenVPN 2.1 se suportă o configurație inline. Permițându-ți să localizezi certificatele, și cheile, toate într-un singur fișier de configurare. Dar documentația despre cum se creează acest fișier de configurare nu a fost adăugată până la recenta versiune 2.3.

Consultați pagina INLINE FILE SUPPORT secțiunea din pagina de manual OpenVPN pentru mai multe informații.

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>

Documentația pentru fișierul de configurare este aceeași cu documentația pentru opțiunile din linia de comandă:

OpenVPN permite ca orice opțiune să fie plasată fie în linia de comandă, fie într-un fișier de configurare. Deși toate opțiunile de pe linia de comandă sunt precedate de o liniuță dublă („–„), acest prefix poate fi eliminat atunci când o opțiune este plasată într-un fișier de configurare.

Comentarii

  • Nu am reușit să o fac să funcționeze cu Windows Connect Client (openvpn.net/?option=com_content&id=357), se plânge de ceva de genul Could not read file C:\...[inline] așa că se pare că clientul nu știe despre certificatele inline (încă). –  > Por Patrick Oscity.
  • Nu știu dacă vă ajută, dar am lăsat valorile de configurare ca, cert, key și tls-auth în afară și funcționează. –  > Por Ikke.
  • Ar trebui să eliminați liniile cu [inline]. În loc de tls-auth [inline] 1 ar trebui să folosiți tls-direction 1 –  > Por plaisthos.
  • Îmi pare rău că este key-direction 1. Am încurcat asta. Patch-ul meu la pagina de manual a fost deja integrat. Consultați pagina de manual 2.3 la rubrica INLINE FILES: community.openvpn.net/openvpn/wiki/Openvpn23ManPage. Am copiat-o în propriul răspuns pentru a o face mai ușor de citit și de accesat. –  > Por plaisthos.
  • @Strubbl: vezi pașii 10 și 11 din acest link digitalocean.com/community/tutoriale/… –  > Por Sai Ramachandran.
plaisthos

Din OpenVPN 2.3 pagina de manual (Este acceptat începând cu versiunea 2.1rc-ceva):

OpenVPN permite includerea de fișiere în configurația principală pentru --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secret și --tls-auth opțiuni.

Fiecare fișier inline început prin linia <option> și încheiat de linia </option>.

Iată un exemplu de utilizare a unui fișier inline

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

Atunci când se utilizează funcția de fișier în linie cu --pkcs12 fișierul în linie trebuie să fie codificat în baza 64. Codificarea unui fișier .p12 în base64 se poate face, de exemplu, cu OpenSSL, prin rularea openssl base64 -in input.p12

De asemenea, rețineți că key-direction opțiune:

--key-direction
Modalitate alternativă de a specifica parametrul opțional de direcție pentru funcția --tls-auth și --secret opțiuni. Utilă atunci când se utilizează fișiere inline (a se vedea secțiunea privind fișierele inline).

Eric Maasdorp

Acest lucru a fost testat cu OpenVPN 2.3.4Debian 8.9 Server cu clienți Win7.

Pasul 1. Creați un fișier care să conțină valorile implicite (eu îl numesc inline_client.conf)toate setările trebuie să se potrivească cu valorile din 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

Pasul 2. Creați următorul script, ajustați căile după cum este necesar șichmod 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

Pasul 3. Executați MakeInline.sh se va cere numele unui client pe care trebuia să-l fi creat deja cu build-key or build-key-pass.va cere un nume pentru fișierul ovpn.Standardul meu este ServerToConnectTo.ClientName care va produceServerToConnectTo.ClientName.ovpn

Notă: dacă ați folosit build-key în loc de build-key-pass atunci oricine care intră în posesia fișierului *.ovpn va avea acces la serverul dumneavoastră fără parolă!

Comentarii

  • ce este 1 pentru după tls-auth în șablonul tău? de asemenea, nu este tls-crypt mai sigur? –  > Por FalcoGer.
dragon788

Acest script Python poate fi rulat pe server pentru a genera cheile de client și un profil. L-aș pune în linie, dar nu este creația mea și este lung și poate fi actualizat periodic, și există furci ale acestuia, așa că sunt șanse să poată fi căutat pe web pentru viitorii călători pe web. Dacă linkul nu funcționează, încercați să căutați „openvpn_gen.py”.

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

Tags: