In questo howto realizzerò una connessione OpenVpn tra un sistema GNU/Linux debian based e un client Windows XP, mediante certificati X509.
Preparazione del server
installazione di openvpn mediante apt
# apt-get install openvpn
# mkdir -p /etc/openvpn/vpn1/certs
creazione dei certificati mediante OpenSSL
creazione della CA
# /usr/lib/ssl/misc/CA.sh -newca (assegnamo le caratteristiche della ca)
abbiamo la dir demoCA che contiene la nostra Certification Authority
# /usr/lib/ssl/misc/CA.sh -newreq (richiediamo il primo certificato)
# /usr/lib/ssl/misc/CA.sh -sign (e lo firmiamo)
a questo punto abbiamo due file:
- newreq.pem che contiene la richiesta di certificato e la chiave privata criptata associata a tale certificato.
- newcert.pem che il certificato x509 firmato dalla CA
decrittiamo la chiave privaa
# openssl rsa -in newreq.pem -out vpnserver.key
e rinominiamo il file di cerficato per chiarezza
# mv newcert.pem vpnserver.pem
adesso abbiamo
- vpnserver.pem che contiene il certificato x509 del vpnserver
- vpnserver.key che contiene la chiave privata IN CHIARO del vpnserver
spostiamo i certificati nella loro nuova casa
# mv vpnserver.pem /etc/openvpn/vpn1/certs
# mv vpnserver.key /etc/openvpn/vpn1/certs
# chmod 400 /etc/openvpn/vpn1/certs/vpnserver.key (MOLTO IMPORTANTE)
e ci mettiamo anche il certificato della CA
# cp demoCA/cacert.pem /etc/openvpn/vpn1/certs
creiamo il file di definizione Diffie-Hellman direttamente al suo posto
# openssl dhparm -out /etc/openvpn/vpn1/certs/dh1024.pem 1024
se possediamo un file di revoche lo copiamo nella dir dei certificati
# cp crl.pem /etc/openvpn/vpn1/certs
a questo punto non ci resta che creare il file di configurazione per il server
# vi /etc/openvpn/vpn1/local.conf##### local.conf server ######
# la porta da utilizzare
port 1194
# il protocollo di trasporto
proto udp
# il device tun da utilizzare
dev tun
# il certificato della CA
ca /etc/openvpn/vpn1/certs/cacert.pem
# il certificato del server OpenVPN
cert /etc/openvpn/vpn1/certs/vpnserver.pem
# la chiave privata del certificato
key /etc/openvpn/vpn1/certs/vpnserver.key
# il certificato di definizione Diffie-Hellman
dh /etc/openvpn/vpn1/certs/dh1024.pem
# eventuale CRL (certificate revocation list)
crl-verify /etc/openvpn/vpn1/certs/crl.pem
# subnet da utilizzare per i client
# N.B. quando si sceglie questa subnet, tenere conto che lo spazio di
# indirizzamento deve essere quadruplo rispetto al numero di client
# in quanto verra' utilizzata una rete /30 per ogni client collegato
# es. una rete di classe C e' adatta per un max di 64 client
server 192.168.100.0 255.255.255.0
# il file che contiene il db degli ip assegnati quando OpenVPN viene stoppato
# intervenedo su questo file si possono assegnare gli ip in base al certificato che viene presentato
# dal client
ifconfig-pool-persist /etc/openvpn/vpn1/ipp.txt
# informazioni di keepalive del link vpn
keepalive 10 120
# compressione del trasporto
comp-lzo
# persistenza di chiavi e tunnel
persist-key
persist-tun
# logfile
status /etc/openvpn/vpn1/openvpn-status.log
# livello di verbosity del log
verb 3
#### end local.con vpnserver ######
realizziamo un certificato utente
# /usr/lib/ssl/misc/CA.sh -newreq
# /usr/lib/ssl/misc/CA.sh -sign
# openssl pkcs12 -in newcert.pem -inkey newreq.pem -certfile demoCA/cacert.pem -export -out primoclient.p12
ci vengono chieste 2 password: la prima serve a decrittare la chiave privata (la password che abbiamo impostato15 secondi fa) la seconda risulta essere MOLTO importante in quanto serve a crittare nuovamente la private key a a creare il pacchetto PKCS12. Questo formato e’ lo standard di distribuzione dei certificati+chiavi+certificatoCA. Al client dovremo consegnare il file p12 e la password di utilizzo.
consegnamo il file p12 al client.
purtroppo siamo costretti a consegnare anche il file cacert.pem nonostante sia già contenuto nel p12
Questa operazione diminuisce il livello di eleganza della nostra soluzione.
Configurazione client
installiamo openvpn su un client windows xp prelevando il windows installer dal sito http://www.openvpn.net
mettiamo il file p12 che ci e’ stato consegnato nel supporto che preferiamo (smart card o importazione nel repository di windows).
mettiamo il file cacert.pem in una directory. Per esempio c:/client/cacert.pem
passiamo a openvpn un file di configurazione come questo:
#### local.conf client###
# questo un client
client
# che usa il device tun
dev tun
# mediante il protocollo udp
proto udp
# si collega al server a questo indirizzo
remote xxx.xxx.xxx.xxx
# non effettua il bind
nobind
# definiamo la persistenza
persist-key
persist-tun
# il certificato della CA
ca c:/client/cacert.pem
# usiamo il gestore di certificati di win per cercare ed utilizzare il certificato che abbia all'interno del subject un campo con questo valore. Se abbiamo messo il certificato in una smart card sara' condizione necessaria e sufficiente inserire la smart card al momento di avviare il client OpenVPN.
cryptoapicert "SUBJ:mario rossi"
# compressione del trasporto
comp-lzo
# verbosity del log
verb 3
a questo punto si devono definire le rotte IP all’interno del tunnel e il gioco è fatto.
Leave a Reply