User Tools

Site Tools


doc:appunti:linux:sa:openvpn

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
Last revisionBoth sides next revision
doc:appunti:linux:sa:openvpn [2009/05/13 12:16] niccolodoc:appunti:linux:sa:openvpn [2018/11/29 23:12] – [Configurazione del server] niccolo
Line 13: Line 13:
 default_crl_days               = 1095     # how long before next CRL default_crl_days               = 1095     # how long before next CRL
 default_bits                   = 2048 default_bits                   = 2048
 +
 +[ req_distinguished_name ]
 countryName_default            = IT countryName_default            = IT
 stateOrProvinceName_default    = Italy stateOrProvinceName_default    = Italy
Line 82: Line 84:
 # File containing Diffie Hellman parameters in .pem format # File containing Diffie Hellman parameters in .pem format
 # Diffie Hellman parameters may be considered public. # Diffie Hellman parameters may be considered public.
-# Generated by: openssl dhparam -out server.rigacci.org_dh1024.pem 1024+# Generated by: openssl dhparam -out ssl/server.rigacci.org_dh1024.pem 1024
 dh ssl/server.rigacci.org_dh1024.pem dh ssl/server.rigacci.org_dh1024.pem
  
Line 137: Line 139:
 push "route 10.38.0.1" push "route 10.38.0.1"
 push "topology net30" push "topology net30"
-ifconfig-pool 10.38.0.4 10.38.255.251+ifconfig-pool 10.38.0.4 10.38.99.251
 # #
 # To simplify the above configuration you can use the helper directive # To simplify the above configuration you can use the helper directive
Line 159: Line 161:
 </file> </file>
  
-Si può fare il push dal server verso il client di eventuali parametri personalizzati, basta ad esempio creare un file **''rigacciorg_server_clients/rigacciorg_client''** (avendo avuto l'accortezza di assegnare nel certificato il **''CN=rigacciorg_client''**):+Si può fare il push verso il client di parametri specifici per il client stesso, basta creare un file con **nome uguale al CN** usato nel certificato e salvarlo nella directory indicata da **client-config-dir**. Ad esempio per assegnare un IP sempre uguale ad un client si crea il file **''rigacciorg_server_clients/rigacciorg_client''** con il seguente contenuto:
  
 <file> <file>
-ifconfig-push 172.18.1.202 172.18.1.1+ifconfig-push 10.38.100.2 10.38.100.1
 </file> </file>
 +
 +Notare che l'indirizzo è assegnato fuori dal pool definito da **ifconfig-pool**, inoltre gli indirizzi vanno assegnati con la topologia **net30**, cioè per ogni host viene allocato un blocco di 4 indirizzi: il primo è inutilizzato, il secondo è il PtP assegnato al server, il terzo è il PtP assegnato al client e il quarto è inutilizzato.
  
 I file gestiti da openssl sono in formato **PEM** ([[wp>X.509|X.509 Privacy Enhanced Mail]]), si tratta di una codifica base64 con header. Ecco alcuni comandi per vedere in plain text il contenuto dei file. I file gestiti da openssl sono in formato **PEM** ([[wp>X.509|X.509 Privacy Enhanced Mail]]), si tratta di una codifica base64 con header. Ecco alcuni comandi per vedere in plain text il contenuto dei file.
Line 192: Line 196:
 </code> </code>
  
-===== Revoca di una chiave =====+===== Revoca di un certificato client (chiave=====
  
 Qualora si voglia impedire l'accesso ad un client (oppure se la sua chiave è stata compromessa), si revoca... Qualora si voglia impedire l'accesso ad un client (oppure se la sua chiave è stata compromessa), si revoca...
  
 <code> <code>
-openssl ca -config ssl/openssl.cnf -keyfile ssl/private/rigacci.org_cakey.pem \ +openssl ca -config ssl/openssl.cnf 
-    -cert ssl/rigacciorg_cacert.pem -revoke niccolo@rigacci.org_cert.pem+    -cert ssl/rigacciorg_cacert.pem -keyfile ssl/private/rigacci.org_cakey.pem \ 
 +    -revoke niccolo@rigacci.org_cert.pem
 </code> </code>
  
Line 206: Line 211:
  
 <code> <code>
-openssl ca -config ssl/openssl.cnf -gencrl -keyfile ssl/private/rigacci.org_cakey.pem \ +openssl ca -config ssl/openssl.cnf 
-    -cert ssl/rigacci.org_cacert.pem -out ssl/rigacci.org_crl.pem+    -cert ssl/rigacciorg_cacert.pem -keyfile ssl/private/rigacci.org_cakey.pem \ 
 +    -gencrl -out ssl/rigacci.org_crl.pem
 </code> </code>
  
Line 271: Line 277:
 </file> </file>
  
 +===== Rinnovo del certificato del server =====
 +
 +Quando **scade il certificato del server smettono di funzionare TUTTE le VPN**. Per fortuna è sufficiente rinnovare tale certificato e **non è necessario distribuirlo** su tutti i client. La procedura che segue genera una nuova chiave e un nuovo certificato firmato dalla stessa CA locale.
 +
 +Il discorso è diverso quando **scade il certificato della CA** locale, in questo caso per ripristinare il funzionamento delle VPN senza distribuire il nuovo CA cert è necessario utilizzare un trucco: generare un nuovo CA cert, ma riutilizzando la vecchia chiave . La soluzione (da verificare) è descritta nel post [[ https://serverfault.com/questions/306345/certification-authority-root-certificate-expiry-and-renewal|Certification authority root certificate expiry and renewal]]. Altri dettagli si trovano nel post [[https://forums.openvpn.net/viewtopic.php?t=18671|Expired CA - clients can't connect]].
 +
 +**ATTENZIONE** ai nomi dei file, che sono **diversi rispetto agli esempi riportati sopra**; tutto è stato eseguito nella directory **/etc/openvpn/ssl/**. La seguente ricetta è stata verificata su Debian 8 Jessie. [[https://it.wiktionary.org/wiki/YMMV|YMMV]]!
 +
 +Anzitutto si deve **revocare il vecchio certificato**, altrimenti al momento della firma del nuovo si ottiene l'errore:
 +
 +<code>
 +failed to update database
 +TXT_DB error number 2
 +</code>
 +
 +infatti il nuovo certificato avrà lo stesso nome del vecchio. Dopo aver revocato un certificato si deve sempre rigenerare la CRL lista dei certificati revocati. **ATTENZIONE** a individuare il corretto certificato! Nel nostro esempio è **00.pem**, ma si deve verificare il file **index.txt** e i file nella directory **newcerts/**:
 +
 +<code>
 +# Revoke old certificate.
 +openssl ca -config openssl.cnf -keyfile private/vpn.rigacci.org_cakey.pem \
 +    -cert vpn.rigacci.org_cacert.pem -revoke newcerts/00.pem
 +# Generate the new CRL.
 +openssl ca -config openssl.cnf -gencrl -keyfile private/vpn.rigacci.org_cakey.pem \
 +    -cert vpn.rigacci.org_cacert.pem -out vpn.rigacci.org_crl.pem
 +</code>
 +
 +Alla richiesta di **A challenge password** e **An optional company name** si è lasciata una risposta vuota.
 +
 +Il vecchio certificato può essere salvato o rimosso:
 +
 +<code>
 +mv private/vpn.rigacci.org_key.pem private/vpn.rigacci.org_key.pem.expired
 +mv vpn.rigacci.org_cert.pem vpn.rigacci.org_cert.pem.expired
 +</code>
 +
 +Ecco quindi la **generazione del nuovo certificato** con la relativa richiesta di firma CSR, seguita dalla **firma da parte della CA**:
 +
 +<code>
 +openssl req -config openssl.cnf -nodes -new \
 +     -keyout private/vpn.rigacci.org_key.pem -out vpn.rigacci.org_csr.pem
 +chmod 0600 private/vpn.rigacci.org_key.pem
 +openssl ca -config openssl.cnf -in vpn.rigacci.org_csr.pem -cert vpn.rigacci.org_cacert.pem \
 +    -keyfile private/vpn.rigacci.org_cakey.pem -out vpn.rigacci.org_cert.pem
 +rm vpn.rigacci.org_csr.pem
 +</code>
doc/appunti/linux/sa/openvpn.txt · Last modified: 2020/02/24 17:59 by niccolo