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
doc:appunti:linux:sa:openvpn [2009/05/13 12:16] niccolodoc:appunti:linux:sa:openvpn [2020/02/24 17:59] (current) 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 30: Line 32:
  
   * **''server.rigacci.org.conf''** OpenVPN configuration file   * **''server.rigacci.org.conf''** OpenVPN configuration file
-  * **''ssl/server.rigacci.org_dh1024.pem''**+  * **''ssl/server.rigacci.org_dh2048.pem''**
   * **''ssl/rigacci.org_cacert.pem''** Certificate Authority (CA) public certificate in .pem format   * **''ssl/rigacci.org_cacert.pem''** Certificate Authority (CA) public certificate in .pem format
   * **''ssl/rigacci.org_crl.pem''** Certificate Revocation List in .pem format   * **''ssl/rigacci.org_crl.pem''** Certificate Revocation List in .pem format
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_dh2048.pem 2048 
-dh ssl/server.rigacci.org_dh1024.pem+dh ssl/server.rigacci.org_dh2048.pem
  
 # Certificate Authority (CA) file in .pem format. # Certificate Authority (CA) file in .pem format.
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.1242209770.txt.gz · Last modified: 2009/05/13 12:16 by niccolo