Hasilkan profil OpenVPN untuk diimpor oleh pengguna klien

40

Apakah ada dokumentasi atau sumber daya yang menjelaskan cara membuat dan menghosting profil untuk klien OpenVPN yang akan diimpor? Idealnya ingin pengguna saya tidak perlu secara terpisah mengambil file .zip dari sertifikat .ovpn +, ekstrak ke direktori yang tepat, atur .ovpn mereka, dll.

Yang
sumber

Jawaban:

40

Rupanya sejak OpenVPN 2.1 konfigurasi inline telah didukung. Mengizinkan Anda menemukan sertifikat Anda, dan kunci semuanya dalam satu file konfigurasi. Tetapi dokumentasi tentang cara membuat file konfigurasi ini tidak ditambahkan sampai rilis terbaru dari 2.3.

Lihat INLINE FILE SUPPORTbagian halaman manual OpenVPN untuk info lebih lanjut.

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>

Dokumen untuk file konfigurasi sama dengan dokumen untuk opsi baris perintah:

OpenVPN memungkinkan opsi apa pun ditempatkan di baris perintah atau di file konfigurasi. Meskipun semua opsi baris perintah didahului dengan tanda hubung ganda ("-"), awalan ini dapat dihapus ketika suatu opsi ditempatkan dalam file konfigurasi.

Sakit kepala
sumber
Tidak dapat membuatnya berfungsi dengan Windows Connect Client ( openvpn.net/?option=com_content&id=357 ), ia mengeluh tentang sesuatu seperti Could not read file C:\\...\[inline]sehingga tampaknya klien tidak mengetahui tentang sertifikat sebaris (belum).
Patrick Oscity
Tidak tahu apakah itu membantu, tapi saya hanya meninggalkan nilai konfigurasi ca, cert, key dan tls-auth dan itu berfungsi.
Ikke
2
Anda harus menghapus garis dengan [inline]. Alih-alih tls-auth [inline] 1 Anda harus menggunakan tls-direction 1
plaisthos
2
Maaf itu adalah kunci-arah 1. Mencampuradukkan itu. Tambalan saya ke halaman manual sudah terintegrasi. Lihat halaman manual 2.3 di bawah INLINE FILES: community.openvpn.net/openvpn/wiki/Openvpn23ManPage . Saya menyalinnya ke jawaban sendiri untuk membuatnya dapat dibaca dan diakses.
plaisthos
1
@ Strtrbl: lihat Langkah 10 dan 11 dari tautan ini digitalocean.com/community/tutorials/…
Sai Ramachandran
8

Dari OpenVPN 2.3 halaman manual (Hal ini didukung karena 2.1rc-sesuatu):

OpenVPN memungkinkan termasuk file dalam konfigurasi utama untuk opsi --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secretdan --tls-auth.

Setiap file inline dimulai oleh baris <option> dan berakhir dengan baris </option>.

Berikut adalah contoh penggunaan file inline

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

Saat menggunakan fitur file inline dengan --pkcs12 file inline harus di-encode base64. Pengkodean file .p12 ke base64 dapat dilakukan misalnya dengan OpenSSL dengan menjalankanopenssl base64 -in input.p12

Perhatikan juga key-directionopsi:

--key-direction
Cara alternatif menentukan parameter arah opsional untuk opsi --tls-auth dan --secret. Berguna saat menggunakan file inline (Lihat bagian tentang file inline).

plaisthos
sumber
3

Ini telah diuji dengan OpenVPN 2.3.4 Debian 8.9 Server dengan klien Win7.

Langkah 1. Buat file yang berisi default Anda (saya menyebutnya inline_client.conf) semua pengaturan harus cocok dengan nilai server.conf Anda

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

Langkah 2. Buat skrip berikut, sesuaikan jalur seperti yang diperlukan dan 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

Langkah 3. Jalankan MakeInline.shitu akan meminta nama klien yang Anda harus sudah dibuat dengan build-key or build-key-pass. Itu akan meminta nama untuk file ovpn. Standar saya adalah ServerToConnectTo.ClientName yang akan menghasilkan ServerToConnectTo.ClientName.ovpn

Catatan: jika Anda menggunakan build-keyalih-alih build-key-passmaka siapa pun yang memegang *.ovpnakan memiliki akses ke server Anda tanpa kata sandi!

Eric Maasdorp
sumber
1

Skrip Python ini dapat dijalankan di server untuk menghasilkan kunci klien dan profil. Saya sudah inline tapi itu bukan ciptaan saya dan panjang dan dapat diperbarui secara berkala, dan ada garpu sehingga kemungkinan itu akan dapat dicari di web untuk pelancong web masa depan. Jika tautannya tidak berfungsi coba cari "openvpn_gen.py".

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

dragon788
sumber