Wygeneruj profil OpenVPN dla użytkownika klienta do zaimportowania

40

Czy istnieje dokumentacja lub zasób opisujący sposób generowania i hostowania profilu dla klienta OpenVPN do zaimportowania? Idealnie byłoby, gdyby moi użytkownicy nie musieli osobno pobierać pliku .zip certyfikatów .ovpn +, rozpakowywać go do odpowiedniego katalogu, poprawiać .ovpn itp.

Yang
źródło

Odpowiedzi:

40

Najwyraźniej od OpenVPN 2.1 obsługiwana jest konfiguracja wbudowana. Umożliwiając zlokalizowanie certyfikatów i kluczy w jednym pliku konfiguracyjnym. Ale dokumentacja dotycząca sposobu utworzenia tego pliku konfiguracyjnego została dodana dopiero w najnowszej wersji 2.3.

Aby uzyskać więcej informacji, zobacz INLINE FILE SUPPORTsekcję strony podręcznika OpenVPN .

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>

Dokumenty dla pliku konfiguracyjnego są takie same jak dokumenty dla opcji wiersza poleceń:

OpenVPN pozwala na umieszczenie dowolnej opcji w wierszu poleceń lub w pliku konfiguracyjnym. Chociaż wszystkie opcje wiersza poleceń są poprzedzone podwójnym myślnikiem („-”), ten prefiks można usunąć, gdy opcja zostanie umieszczona w pliku konfiguracyjnym.

Zoredache
źródło
Nie można zmusić go do współpracy z klientem Windows Connect ( openvpn.net/?option=com_content&id=357 ), narzeka na coś takiego, Could not read file C:\\...\[inline]więc wydaje się, że klient nie wie (jeszcze) o certyfikatach wbudowanych.
Patrick Oscity
Nie wiem, czy to pomaga, ale właśnie zostawiłem wartości konfiguracyjne ca, cert, key i tls-auth i działa.
Ikke
2
Powinieneś usunąć linie za pomocą [inline]. Zamiast tls-auth [inline] 1 powinieneś użyć tls-direction 1
plaisthos
2
Przepraszam, to jest klucz-kierunek 1. To się pomieszało. Moja łatka do strony podręcznika została już zintegrowana. Zobacz stronę podręcznika 2.3 pod PLIKAMI INLINE: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . Skopiowałem go do własnej odpowiedzi, aby był czytelny i dostępny.
plaisthos
1
@Strubbl: patrz kroki 10 i 11 tego łącza digitalocean.com/community/tutorials/...
Sai Ramachandran
8

Z 2.3 OpenVPN manualu (To jest obsługiwana od 2.1rc-coś):

OpenVPN pozwala na włączenie plików w głównej konfiguracji dla opcji --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secreti --tls-auth.

Każdy plik śródliniowy rozpoczynany od linii <option>i kończący się przez linię </option>.

Oto przykład użycia wbudowanego pliku

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

Podczas korzystania z funkcji pliku wbudowanego z --pkcs12plikiem wbudowanym należy go zakodować w formacie base64. Kodowanie pliku .p12 w base64 można wykonać na przykład za pomocą OpenSSL, uruchamiającopenssl base64 -in input.p12

Zwróć również uwagę na key-directionopcję:

--key-direction
Alternatywny sposób określania opcjonalnego parametru kierunku dla opcji --tls-auth i --secret. Przydatne w przypadku korzystania z plików wbudowanych (zobacz sekcję dotyczącą plików wbudowanych).

plaisthos
źródło
3

Zostało to przetestowane na serwerze OpenVPN 2.3.4 Debian 8.9 z klientami Win7.

Krok 1. Utwórz plik zawierający ustawienia domyślne (nazywam to inline_client.conf) wszystkie ustawienia muszą być zgodne z wartościami 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

Krok 2. Utwórz następujący skrypt, dostosuj ścieżki zgodnie z wymaganiami i 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

Krok 3. Wykonaj MakeInline.shpoprosi o podanie nazwy klienta, który musiałeś już utworzyć build-key or build-key-pass. Poprosi o nazwę pliku ovpn. Mój standard to ServerToConnectTo.ClientName, który będzie produkować ServerToConnectTo.ClientName.ovpn

Uwaga: jeśli użyjesz build-keyzamiast build-key-passtego, każdy, kto zdobędzie, *.ovpnbędzie miał dostęp do twojego serwera bez hasła!

Eric Maasdorp
źródło
1

Ten skrypt w języku Python można uruchomić na serwerze, aby wygenerować klucze klienta i profil. Chciałbym to załączyć, ale to nie jest moje dzieło i jest długie i może być okresowo aktualizowane, a są tam widelce, więc szanse na to, że będzie można je przeszukiwać w Internecie dla przyszłych podróżników. Jeśli link nie działa, spróbuj wyszukać „openvpn_gen.py”.

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

dragon788
źródło