Configurazione di OpenVPN con autenticazione TLS a due vie
Lo svantaggio del metodo di autenticazione con chiave segreta è che il suo furto da uno degli host VPN partecipanti comporta la necessità di cambiare questa chiave da parte di tutti i partecipanti. Ciò solleva la questione di come trasferire in modo sicuro la nuova chiave attraverso un canale Internet non sicuro. Pertanto, se è necessario collegare più client al server, si dovrebbe scegliere l'autenticazione TLS.
In questo caso, ogni parte ha la propria chiave privata, che non viene trasferita da nessuna parte. Viene trasmesso solo il certificato di chiave pubblica del client firmato dalla CA. Tali certificati vengono rilasciati a pagamento per un certo periodo di tempo da organizzazioni specializzate. Ma per organizzare la VPN all'interno della tua azienda, se non ci sono requisiti speciali per la sicurezza, puoi utilizzare il tuo centro di certificazione.
Ora consideriamo un esempio di creazione di chiavi e certificati in Windows per connettere due client: Keenetic-2 e Keenetic-3 al server Keenetic-1.
Per creare tutte le chiavi e i certificati necessari, abbiamo bisogno di un set di script EasyRSA dal pacchetto OpenVPN versione 2.4.6-I602 per Windows, che utilizza anche l'utilità openssl inclusa.
Per installare EasyRSA, seleziona il componente EasyRSA 2 Certificate Management Scripts durante l'installazione di OpenVPN:

Nelle versioni OpenVPN 2.5.x, per installare gli script EasyRSA, premere il pulsante Customize nella prima schermata del programma di installazione e scorrere fino alla fine dell'elenco dei componenti.


Aprire la riga di comando di Windows come amministratore.
Andare su
C:\Program Files\OpenVPN\easy-rsaed eseguire:init-config.bat

Come risultato, otterremo un file
vars.batche configura l'ambiente per generare le tue chiavi e i tuoi certificati.Aprire questo file nel Blocco note di Windows e specificare una cartella dove memorizzarli; di default è
keys:set KEY_DIR=keys
così come i valori predefiniti dei campi del proprietario del certificato, per esempio:
set KEY_COUNTRY=GB set KEY_PROVINCE=YourProvince set KEY_CITY=YourCity set KEY_ORG=YourOrganisation set KEY_EMAIL=mail@example.com set KEY_CN=CommonName set KEY_NAME=KeyName set KEY_OU=OrganisationUnit
Salvare il file modificato.
Creare nuovi file ausiliari
index.txte seriali eseguendo (una volta) nella riga di comando di Windows:vars clean-all

Creare una
chiave privatae uncertificatoper la propria autorità di certificazione effettuando le seguenti operazioni:vars build-ca

I file generati
ca.keyeca.certdella tua autorità di certificazione appariranno nella cartellaC:\Program Files\OpenVPN\easy-rsa\keys.Creare un file
Diffie-Hellmanper proteggere il traffico dalla decrittazione. Il server TLS lo userà. In alcuni casi, la procedura può richiedere un po' di tempo (ad esempio, quando la dimensione della chiave è di4096 bit, ci vogliono decine di minuti), ma deve essere eseguita una sola volta:vars build-dh

Il file
dh2048.pem(o dh4096.pem quando si utilizza una dimensione della chiave a4096 bit) apparirà nella cartellaC:\Program Files\OpenVPN\easyrsa\keys.Creare una chiave privata e un certificato per il server OpenVPN TLS (Keenetic-1) eseguendo:
vars build-key-server Keenetic-1Quando lo script chiede il
Common Name (CN), inserire il nome del server, come Keenetic-1. Alla fine, confermare due volte (y) la firma del certificato.
Creare la
chiave privata, larichiesta PEMe ilcertificatoper il primo client OpenVPN TLS (Keenetic-2) eseguendo:vars build-key Keenetic-2Quando lo script chiede il
Common Name (CN), inserire il nome del primo client — Keenetic-2. Confermare due volte (y) la firma del certificato.
Ripetere il passaggio precedente per il secondo client (Keenetic-3):
vars build-key Keenetic-3Quando lo script chiederà il
Common Name (CN), inserire il nome del secondo client — Keenetic-3. Confermare due volte (y) la firma del certificato.Allo stesso modo, è possibile creare
chiavi,richiesteecertificatiper qualsiasi numero di client.Creare una
chiave HMACper una protezione aggiuntiva contro gli attacchi DoS e il flooding eseguendo:vars openvpn.exe --genkey --secret keys\ta.key

A questo punto, tutti i file necessari sono stati creati:

I seguenti file sono necessari per l'uso nelle configurazioni del server e dei client OpenVPN:
ca.crt— certificato del centro di certificazionedh2048.pem (o dh4096.pem)— file Diffie-HellmanKeenetic-1.crt— certificato del server OpenVPN (Keenetic-1)Keenetic-1.key— chiave privata del server OpenVPN (Keenetic-1)Keenetic-2.crt— certificato del primo client OpenVPN (Keenetic-2)Keenetic-2.key— chiave privata del primo client OpenVPN (Keenetic-2)Keenetic-3.crt— certificato del secondo client OpenVPN (Keenetic-3)Keenetic-3.key— chiave privata del secondo client OpenVPN (Keenetic-3)ta.key— chiave HMAC per una protezione aggiuntiva contro gli attacchi DoS e il flooding
L'unica cosa che resta da fare è aggiungere il loro contenuto ai file di testo di configurazione del server e del client.
Per creare un file di configurazione del server OpenVPN, usa l'esempio
server.ovpnche si trova inC:\Program Files\OpenVPN\sample-config\. Sarà necessario inserirvi lechiavie icertificatinel modo seguente:Sostituire la riga:
ca ca.crt
con la sezione:
<ca> -----BEGIN CERTIFICATE----- <--Insert the body of the certificate of the certification centre from the file ca.crt here -----END CERTIFICATE----- </ca>
Sostituire:
cert server.crt
con la sezione:
<cert> -----BEGIN CERTIFICATE----- <--Insert the body of the OpenVPN server certificate from the Keenetic-1.crt file here -----END CERTIFICATE----- </cert>Sostituire la riga:
key server.key
con la sezione:
<key> -----BEGIN PRIVATE KEY----- <--Insert the body of the OpenVPN server private key from the Keenetic-1.key file here -----END PRIVATE KEY----- </key>Sostituire la riga:
dh dh2048.pem
con la sezione:
<dh> -----BEGIN DH PARAMETERS----- <--Insert the contents of the file Diffie-Helman dh4096.pem here -----END DH PARAMETERS----- </dh>
Decommentare la riga:
topology subnet
Sostituire la riga:
server 10.8.0.0 255.255.255.0
con la riga:
server 10.1.0.0 255.255.255.0
Commentare la riga:
;ifconfig-pool-persist ipp.txt
Sostituire la riga:
tls-auth ta.key 0
con la sezione:
<tls-auth> -----BEGIN OpenVPN Static key V1----- <--Insert the contents of the ta.key file here -----END OpenVPN Static key V1----- </tls-auth>
e aggiungere la riga:
key-direction 0
Commentare la riga:
;status openvpn-status.log
Per creare il
file di configurazioneper il primo client OpenVPN, utilizzare l'esempioclient.ovpnche si trova inC:\Program Files\OpenVPN\sample-config\. Sarà necessario inserirvi lechiavie icertificatinel modo seguente:Nella riga:
remote my-server-1 1194
sostituire
my-server-1con il nome di dominio o l'indirizzo IP pubblico del server OpenVPN (Keenetic-1).Sostituire la riga:
ca ca.crt
con la sezione:
<ca> -----BEGIN CERTIFICATE----- <--Insert the body of the certificate of the certification authority from the file ca.crt here -----END CERTIFICATE----- </ca>
Sostituire la riga:
cert client.crt
con la sezione:
<cert> -----BEGIN CERTIFICATE----- <--Insert the body of the certificate of the first OpenVPN client from the file Keenetic-2.crt -----END CERTIFICATE----- </cert>Sostituire la riga:
key client.key
con la sezione:
<key> -----BEGIN PRIVATE KEY----- <--Insert the body of the private key of the first OpenVPN client from the Keenetic-2.key file here -----END PRIVATE KEY----- </key>Sostituire la riga:
tls-auth ta.key 1
con la sezione:
<tls-auth> -----BEGIN OpenVPN Static key V1----- <--Insert the contents of the ta.key file here -----END OpenVPN Static key V1----- </tls-auth>
e aggiungere la riga:
key-direction 1
Aggiungere una riga con la rotta verso la rete locale del server:
route 192.168.1.0 255.255.255.0
o:
route 0.0.0.0 0.0.0.0
se tutto il traffico deve essere instradato nel tunnel.
Ripetere le stesse azioni per il secondo client prendendo i dati rispettivamente dai file
Keenetic-3.crteKeenetic-3.key.Esempi di tali file di configurazione per tre client Keenetic sono allegati alla fine dell'articolo:
È possibile utilizzarli sostituendo il nome del client
KEENETIC-1.mykeenetic.co.uknei file client con il nome di dominio o l'indirizzo IP pubblico del proprio server Keenetic-1, e icertificatie lechiavicon quelli generati dall'utente.Ora non resta che scaricarli sui router Keenetic allo stesso modo dei punti 1.5, 1.6 ed eseguire le azioni descritte nei punti 1.7, 1.8 di questo manuale.
Questa è la fine della configurazione. Verificare che i tunnel siano stati impostati.
Per fare ciò, eseguire il
pingdell'indirizzo del tunnel del server dal lato client:ping 10.1.0.1
e l'indirizzo del server sulla sua rete domestica:
ping 192.168.1.1
Suggerimento
Nella seconda parte dell'esempio, per semplicità, abbiamo eseguito tutte le operazioni in un'unica cartella, anche se per motivi di sicurezza si consiglia di collocare l'autorità di certificazione su un computer separato, isolato da Internet, e di memorizzare la chiave segreta solo su di esso; e trasportare il certificato su un supporto rimovibile. Allo stesso modo, le chiavi private del server e dei client OpenVPN devono essere collocate solo sui rispettivi lati del tunnel. Possono essere scambiati solo i certificati.
Si consiglia di leggere le seguenti informazioni: