User Tools

Site Tools


doc:appunti:linux:sa:openvpn_easy_rsa

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:openvpn_easy_rsa [2023/09/19 12:52] – [Elenco dei certificati creati e revoca] niccolodoc:appunti:linux:sa:openvpn_easy_rsa [2025/06/24 11:42] (current) – [Configurazione del server] niccolo
Line 32: Line 32:
  
 ===== Creazione della CA ===== ===== Creazione della CA =====
 +
 +FIXME :!: In **Debian 11 Bullseye** sembra che ci sia un bug: l'eseguibile **/etc/openvpn/easy-rsa/easyrsa** è in realtà un link simbolico a **/usr/share/easy-rsa/easyrsa**. Se eseguito dal link simbolico ignora il contenuto del file **/etc/openvpn/easy-rsa/vars**. Come workaround si deve fare una copia dell'eseguibile. :!:
  
 Prima di creare il certificato della Certification Authority e la relativa chiave privata, si deve editare il file **vars** per impostare almeno le seguenti variabili: Prima di creare il certificato della Certification Authority e la relativa chiave privata, si deve editare il file **vars** per impostare almeno le seguenti variabili:
Line 43: Line 45:
 set_var EASYRSA_REQ_OU         "My Organizational Unit" set_var EASYRSA_REQ_OU         "My Organizational Unit"
  
-set_var EASYRSA_CA_EXPIRE      3650 +set_var EASYRSA_CA_EXPIRE      3653 
-set_var EASYRSA_CERT_EXPIRE    1080+set_var EASYRSA_CERT_EXPIRE    3653
 </file> </file>
  
Line 52: Line 54:
  
 <code> <code>
-./easyrsa build-ca+./easyrsa build-ca nopass
 </code> </code>
- 
-Viene chiesta una **passphrase**, che servirà in futuro a firmare i certificati rilasciati da questa CA (è in effetti la password necessaria a sbloccare la chiave privata della CA). Eventualmente è possibile aggiungere il parametro **nopass**, per evitare di dover digitare una password in tutte le operazioni seguenti, in tal caso la sicurezza è garantita dal fatto che solo root può accedere alla cartella **easy-rsa**. 
  
 Durante questo passaggio viene chiesto il **Common Name** della certification authority, in generale si può identificare il CN con il nome host della macchina che gestisce l'infrastruttura PKI. Durante questo passaggio viene chiesto il **Common Name** della certification authority, in generale si può identificare il CN con il nome host della macchina che gestisce l'infrastruttura PKI.
 +
 +Omettendo il parametro **nopass** viene chiesta una //passphrase//, che servirà in futuro a firmare i certificati rilasciati da questa CA (è in effetti la password necessaria a sbloccare la chiave privata della CA). Con il parametro **nopass** si evita di dover digitare una password in tutte le operazioni seguenti; la sicurezza è garantita dal fatto che solo root può accedere alla cartella **easy-rsa**.
  
 Di tutti i file creati, i più importanti sono **./pki/ca.crt** e **./pki/private/ca.key** che sono rispettivamente il certificato della CA (pubblico) e la relativa chiave privata. Oltre a quelli, sempre nella directory **./pki/**, ci sono le direcotry per contentere le revocation lists, ecc. Di tutti i file creati, i più importanti sono **./pki/ca.crt** e **./pki/private/ca.key** che sono rispettivamente il certificato della CA (pubblico) e la relativa chiave privata. Oltre a quelli, sempre nella directory **./pki/**, ci sono le direcotry per contentere le revocation lists, ecc.
 +
 +Per ispezionare il **certificato della CA** (validità, ecc.):
 +
 +<code>
 +openssl x509 -in pki/ca.crt -text -noout
 +</code>
  
 ===== Generazione di certificato e chiave per il server ===== ===== Generazione di certificato e chiave per il server =====
  
 <code> <code>
-./easyrsa build-server-full server nopass+./easyrsa build-server-full server_name nopass
 </code> </code>
  
-In mancanza dell'opzione **nopass** viene chiesta una **PEM pass phrase** per proteggere la chiave del server, tale password andrà digitata tutte le volte che si avvia il server OpenVPN. La chiave privata verrà salvata in un file **./pki/private/server.key**, il certificato pubblico invece in **./pki/issued/server.crt**.+In mancanza dell'opzione **nopass** viene chiesta una **PEM pass phrase** per proteggere la chiave del server, tale password andrà digitata tutte le volte che si avvia il server OpenVPN. La chiave privata verrà salvata in un file **./pki/private/server_name.key**, il certificato pubblico invece in **./pki/issued/server_name.crt**. Il file con la request intermedia viene creato in **./pki/reqs/server_name.req**.
  
 Viene anche chiesta la password per sbloccare la chiave della CA, che deve essere usata per firmare il certificato del server. Viene anche chiesta la password per sbloccare la chiave della CA, che deve essere usata per firmare il certificato del server.
Line 94: Line 102:
 ===== Configurazione del server ===== ===== Configurazione del server =====
  
-Dopo aver creato tutti i file visti in precedenza, si può creare il file di configurazione OpenVPN, **/etc/openvpn/server.conf**:+Dopo aver creato tutti i file visti in precedenza, si può creare il file di configurazione OpenVPN, **/etc/openvpn/server_name.conf**:
  
 <file> <file>
 +#---------------------------------------------------------------
 +# OpenVPN configuration for Easy-RSA server.
 +#---------------------------------------------------------------
 verb 3 verb 3
 status /var/log/openvpn/openvpn-status.log status /var/log/openvpn/openvpn-status.log
-port 1194+lport 1194
 proto udp proto udp
 dev tun dev tun
 ca   /etc/openvpn/easy-rsa/pki/ca.crt ca   /etc/openvpn/easy-rsa/pki/ca.crt
-cert /etc/openvpn/easy-rsa/pki/issued/server.crt +cert /etc/openvpn/easy-rsa/pki/issued/server_name.crt 
-key  /etc/openvpn/easy-rsa/pki/private/server.key+key  /etc/openvpn/easy-rsa/pki/private/server_name.key
 dh   /etc/openvpn/easy-rsa/pki/dh.pem dh   /etc/openvpn/easy-rsa/pki/dh.pem
 # If you revoke some certificate, you need the Certificate Revocation List: # If you revoke some certificate, you need the Certificate Revocation List:
Line 121: Line 132:
 ifconfig-pool-persist ipp.txt ifconfig-pool-persist ipp.txt
 push "route-gateway 10.9.8.1" push "route-gateway 10.9.8.1"
 +# Route only the the local LAN.
 push "route 192.168.0.0 255.255.255.0" push "route 192.168.0.0 255.255.255.0"
 +# Route all the traffic through the VPN.
 +#push "redirect-gateway autolocal"
  
 keepalive 10 120 keepalive 10 120
Line 128: Line 142:
 auth SHA256 auth SHA256
 # Avoid default BF-CBC cipher, because of its 64-bit block size. # Avoid default BF-CBC cipher, because of its 64-bit block size.
-cipher AES-256-CBC+# The --cipher option should not be used any longer with OpenVPN 2.6 in TLS mode. 
 +#cipher AES-256-CBC 
 +# Use --data-ciphers appending AES-256-CBC to the default value for clients using OpenVPN 2.3. 
 +data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC
 persist-key persist-key
 persist-tun persist-tun
Line 144: Line 161:
  
 <code> <code>
-systemctl enable openvpn@server +systemctl enable openvpn@server_name 
-systemctl start openvpn@server+systemctl start openvpn@server_name
 </code> </code>
  
Line 190: Line 207:
 pull pull
 remote 10.0.1.189 1194 remote 10.0.1.189 1194
 +# Routing is pushed by the server.
 +#route-gateway dhcp
 +# Route only the remote LAN.
 +#route 192.168.1.0 255.255.255.0 vpn_gateway
 +# Route all the internet traffic through the VPN.
 +#redirect-gateway autolocal
 remote-cert-tls server remote-cert-tls server
 resolv-retry infinite resolv-retry infinite
 proto udp proto udp
 dev tun1 dev tun1
 +# Various options to fix MTU problems.
 +#tun-mtu 1500
 +mtu-test
 +mssfix 1331
 tls-client tls-client
 reneg-sec 60 reneg-sec 60
 key-direction 1 key-direction 1
-cipher AES-256-CBC+# The --cipher option is used to connect OpenVPN older than 2.6.0. 
 +#cipher AES-256-CBC 
 +# Newer connections using TLS uses the --data-ciphers option. 
 +data-ciphers AES-256-GCM:AES-128-GCM
 auth SHA256 auth SHA256
 auth-nocache auth-nocache
 +# Some Windows clients have problems with DCO like that:
 +# "Attempting to send data packet while
 +# data channel offload is in use. Dropping packet"
 +disable-dco
  
 <ca> <ca>
Line 277: Line 311:
 Viene aggiornato il file **pki/crl.pem** con la nuova Certificate Revocation List, assicurarsi quindi che il file di configurazione del server abbia l'opzione **crl-verify** che punta a questo file. Viene aggiornato il file **pki/crl.pem** con la nuova Certificate Revocation List, assicurarsi quindi che il file di configurazione del server abbia l'opzione **crl-verify** che punta a questo file.
  
-Per vedere il contenuto della CRL e la sua **scadenza** si usa il comando:+Per vedere il **contenuto** della CRL e la sua **scadenza** si usa il comando:
  
 <code> <code>
 openssl crl -in pki/crl.pem -noout -text openssl crl -in pki/crl.pem -noout -text
 </code> </code>
 +
 +Nel'opportuna sezione si potranno leggere delle righe del tipo:
 +
 +<file>
 +Revoked Certificates:
 +    Serial Number: 31185709CFD614AD3F87526A386B06CF
 +        Revocation Date: Sep 19 10:45:13 2023 GMT
 +</file>
 +
 +Poichè la CRL ha una scadenza è necessario un cronjob che periodicamente la rinnovi (il tempo di vita predefinito è di 180 giorni). Ecco ad esempio uno script adeguato:
 +
 +<code bash>
 +#!/bin/sh
 +# Generate a new Certificate Revocation List into the EasyRSA directory.
 +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 +cd /etc/openvpn/easy-rsa
 +./easyrsa gen-crl
 +</code>
 +
 +===== Scadenza e rinnovo dei certificati =====
 +
 +==== Certificato della Certification Authority ====
 +
 +Il certificato della CA è indicato dalla direttiva ''ca'' del file di configurazione del server (ad esempio **/etc/openvpn/server-rigacci-org.conf**):
 +
 +<file>
 +ca   /etc/openvpn/easy-rsa/pki/ca.crt
 +</file>
 +
 +Per visualizzare la scadenza:
 +
 +<code>
 +openssl x509 -text -noout -in /etc/openvpn/easy-rsa/pki/ca.crt
 +</code>
 +
 +=== Rinnovo certificato della CA ===
 +
 +FIXME
 +
 +==== Certificato del server ====
 +
 +Il certificato del server OpenVPN è individuato dalla direttiva ''cert'' del file di configurazione del server (ad esempio **/etc/openvpn/server-rigacci-org.conf**):
 +
 +<file>
 +cert /etc/openvpn/easy-rsa/pki/issued/server.crt
 +</file>
 +
 +Il file contiene in chiaro la //Validity// => //Not After//, altrimenti è possibile decodificare la parte PEM dello stesso file con il comando ''openssl'' visto sopra.
 +
 +=== Rinnovo certificato del server ===
 +
 +È opportuno revocare il vecchio certificato prima di generare quello nuovo. Nel file di configurazione OpenVPN del server si può infatti indicare una sola opzione ''cert'', pertanto non è possibile utilizzare contemporaneamente i due certificati a meno di non utilizzare due configurazioni separate.
 +
 +<code>
 +cd /etc/openvpn/easy-rsa
 +./easyrsa revoke server
 +./easyrsa gen-crl
 +</code>
 +
 +La CRL (Certificate Revocation List) va inclusa nella configurazione del server con l'opzione ''crl-verify'' (nel nostro esempio **/etc/openvpn/server-rigacci-org.conf**):
 +
 +<file>
 +crl-verify /etc/openvpn/easy-rsa/pki/crl.pem
 +</file>
 +
 +Il file **/etc/openvpn/easy-rsa/pki/index.txt** evidenzia la revoca con la lettera **R** ad inizio riga.
 +
 +La generazione del nuovo certificato (con la validità impostata nel file ''/etc/openvpn/easy-rsa/vars'', opzione ''EASYRSA_CERT_EXPIRE'') si effettua con:
 +
 +<code>
 +cd /etc/openvpn/easy-rsa
 +./easyrsa gen-req server nopass
 +./easyrsa sign-req server server
 +</code>
 +
 +==== Certificati dei client ====
 +
 +L'elenco dei certificati emessi per i client in corso di validità si ottiene con:
 +
 +<code>
 +cat /etc/openvpn/easy-rsa/pki/index.txt
 +</code>
 +
 +Una riga che inizia con **V** indica un certificato valido:
 +
 +<file>
 +V   250710072057Z   31AA3A66E6104488745CEE7F06153801   unknown /CN=server
 +V   250710132453Z   122D14AD065C5E91F7C8E4C04C79A756   unknown /CN=galaxy-tab-a8
 +V   250710301624Z   23EC990CF92D1F39651BEB16BF21A91F   unknown /CN=office-pc
 +</file>
 +
 +La scadenza di ognuno di essi si verifica leggendo il file relativo, che ha nome del tipo **//CN//.crt**:
 +
 +<code>
 +cat /etc/openvpn/easy-rsa/pki/issued/galaxy-tab-a8.crt
 +</code>
 +
 +Ciascun file contiene in chiaro la //Validity// => //Not After//, altrimenti è possibile decodificare la parte PEM dello stesso file con il comando ''openssl'' visto sopra.
 +
 +=== Rinnovo certificato di un client ===
 +
 +FIXME
 +
  
 ===== Web References ===== ===== Web References =====
doc/appunti/linux/sa/openvpn_easy_rsa.1695120743.txt.gz · Last modified: by niccolo