Skip to main content

Manuale Utente (Inglese)

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:

openvpn-server10-en.png

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.

openvpn-server11-en.png
openvpn-server12-en.png

Aprire la riga di comando di Windows come amministratore.

  1. Andare su C:\Program Files\OpenVPN\easy-rsa ed eseguire:

    init-config.bat
    openvpn-server13-en.png

    Come risultato, otterremo un file vars.bat che 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.

  2. Creare nuovi file ausiliari index.txt e seriali eseguendo (una volta) nella riga di comando di Windows:

    vars
    clean-all
    openvpn-server14-en.png
  3. Creare una chiave privata e un certificato per la propria autorità di certificazione effettuando le seguenti operazioni:

    vars
    build-ca
    openvpn-server15-en.png

    I file generati ca.key e ca.cert della tua autorità di certificazione appariranno nella cartella C:\Program Files\OpenVPN\easy-rsa\keys.

  4. Creare un file Diffie-Hellman per 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 è di 4096 bit, ci vogliono decine di minuti), ma deve essere eseguita una sola volta:

    vars
    build-dh
    openvpn-server16-en.png

    Il file dh2048.pem (o dh4096.pem quando si utilizza una dimensione della chiave a 4096 bit) apparirà nella cartella C:\Program Files\OpenVPN\easyrsa\keys.

  5. Creare una chiave privata e un certificato per il server OpenVPN TLS (Keenetic-1) eseguendo:

    vars
    build-key-server Keenetic-1

    Quando 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.

    openvpn-server17-en.png
  6. Creare la chiave privata, la richiesta PEM e il certificato per il primo client OpenVPN TLS (Keenetic-2) eseguendo:

    vars
    build-key Keenetic-2

    Quando lo script chiede il Common Name (CN), inserire il nome del primo client — Keenetic-2. Confermare due volte (y) la firma del certificato.

    openvpn-server18-en.png
  7. Ripetere il passaggio precedente per il secondo client (Keenetic-3):

    vars
    build-key Keenetic-3

    Quando 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, richieste e certificati per qualsiasi numero di client.

  8. Creare una chiave HMAC per una protezione aggiuntiva contro gli attacchi DoS e il flooding eseguendo:

    vars
    openvpn.exe --genkey --secret keys\ta.key
    openvpn-server19-en.png

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

    openvpn-server20-en.png

    I seguenti file sono necessari per l'uso nelle configurazioni del server e dei client OpenVPN:

    • ca.crt — certificato del centro di certificazione

    • dh2048.pem (o dh4096.pem) — file Diffie-Hellman

    • Keenetic-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.

  9. Per creare un file di configurazione del server OpenVPN, usa l'esempio server.ovpn che si trova in C:\Program Files\OpenVPN\sample-config\. Sarà necessario inserirvi le chiavi e i certificati nel modo seguente:

    1. 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>
    2. 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>
    3. 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>
    4. 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>
    5. Decommentare la riga:

      topology subnet
    6. Sostituire la riga:

      server 10.8.0.0 255.255.255.0

      con la riga:

      server 10.1.0.0 255.255.255.0
    7. Commentare la riga:

      ;ifconfig-pool-persist ipp.txt
    8. 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
    9. Commentare la riga:

      ;status openvpn-status.log
  10. Per creare il file di configurazione per il primo client OpenVPN, utilizzare l'esempio client.ovpn che si trova in C:\Program Files\OpenVPN\sample-config\. Sarà necessario inserirvi le chiavi e i certificati nel modo seguente:

    1. Nella riga:

      remote my-server-1 1194

      sostituire my-server-1 con il nome di dominio o l'indirizzo IP pubblico del server OpenVPN (Keenetic-1).

    2. 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>
    3. 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>
    4. 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>
    5. 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
    6. 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.

  11. Ripetere le stesse azioni per il secondo client prendendo i dati rispettivamente dai file Keenetic-3.crt e Keenetic-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.uk nei file client con il nome di dominio o l'indirizzo IP pubblico del proprio server Keenetic-1, e i certificati e le chiavi con 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 ping dell'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: