Visite: 6324

Valutazione attuale: 1 / 5

Milano ore 06:00. Sono in viaggio per Roma, una toccata e fuga nella Capitale. L'incarico che ho ricevuto è quello di configurare un client Windows 8, consegnarlo a Roma ed illustrare a due tecnici interni all'azienda come ripetere la configurazione su altri client. La macchina che hanno scelto come prototipo è un gioiello. Un Samsung ATIV Smart PC Pro. Processore Intel Core i5-3317U a 1.7GHz, 4GB di RAM e disco allo stato solido da 128GB, touch screen e Windows 8 64bit di serie. Davvero un piccolo mostro. La VPN aziendale è tenuta su da un Raspberry Pi equipaggiato con Raspbian, una distribuzione basata su Debian debitamente ottimizzata, su cui è installato OpenVPN. L'autenticazione è gestita tramite PKI. Una soluzione versatile ed economica, la stessa VPN basata su PKI (public key infrastructure) che ho configurato a casa.

Ho meno di 3 ore per accedere alla VPN aziendale e configurare il server per autenticare le sessioni SSH provenienti dal client mediante certificato RSA. È più di quello che mi serve. Collego il mio client alla VPN e apro una sessione SSH sul server VPN. Inizio subito la creazione della coppia chiave/certificato che mi serve per connettere il nuovo client alla VPN basata su PKI (public key infrastructure).

$ cd /etc/openvpn/easy-rsa
$ source vars
$ ./build-key client2

Con WinSCP, che insieme a PuTTY forma la coppia di strumenti che utilizzo più di frequente per lavorare su macchine Linux dal mio client Windows 8, copio i file appena creati, insieme al certificato della Certification Authority (ca.crt) ed alla chiave di handshake (pi.key) che poi sposterò nella cartella C:\Programmi\OpenVPN\easy-rsa\config\roma13\ del nuovo client insieme al file roma13.ovpn (basato su home.ovpn) contenente la configurazione client di OpenVPN.

Installo OpenVPN per Windows 8 a 64 bit e modifico il link sul desktop impostando "Esegui questo programma come amministratore" nella proprietà Compatibilità >> Livello di privilegio. Copio il file roma13.ovpn ed imposto i riferimenti alla chiave privata ed al certificato dell'ATIV Pro.

...
key client2.key
cert client2.crt
...

Copio certificati e chiavi ed avvio la connessione VPN: "roma13 è ora connesso". C'è stato un contatto, adesso devo compiere i primi passi nella configurazione del server. So che non dovrei assecondare i miei pensieri, e continuare con la configrazione standard; però l'idea mi piace, anzi mi intriga. E se usassi il certificato usato per connettermi alla VPN per accedere alla sessione SSH invece di crearne uno nuovo? Troppo intrigante, non posso desistere dal provare. Utilizzerò PuTTYgen (PuTTY Key Generator), una utility del pacchetto PuTTY, per convertire la chiave privata usata da OpenVPN nella chiave pubblica in formato OpenSSH, da installare sul server, e in quella privata da usare con PuTTY.

Avvio PuTTYgen e dal menu Conversions lancio il commando Import key. Seleziono il file client2.key e mi compare una a dir poco inquietante finestra dal titolo sinistro ma inequivocabile "PuTTYgen Error"; il messaggio che reca la descrizione è ancora più preoccupante "Couldn't load private key (unrecognized key type)" e non lascia presagire nulla di buono. Non mi resta che dar fondo a tutto il mio ottimismo e cercare una soluzione al dramma che si è appena consumato. Non posso più tornare indietro, il guanto di sfida è stato lanciato, devo configurare il client in questo modo. Intanto tra una configurazione ed una finestra di errore il treno ha passato Bologna.

C'è una strana atomosfera, ovattata, sarà colpa della luce mattutina e del silenzio irreale. Sembra di essere sospesi in un mondo senza tempo, tutto attorno a me il sonno la fa da padrone ed il tepore inizia ad intorpidirmi i sensi.

Il tempo scorre inesorabile ed il treno procede con regolarità. Dopo 45 minuti di ricerca ancora non ho capito perché la procedura di import della chiave non sia andata a buon fine. La chiave privata è valida, infatti la VPN funziona perfettamente. Sono quasi tentato dal buttare la spugna, ma procedo con un altro tentativo. Invece di usare la chiave utilizzata dalla VPN ne creo una nuova direttamente sul client.

Apro una shell dos come amministratore, mi sposto nella cartella C:\Programmi\OpenVPN\easy-rsa e digito il comando per creare la chiave:
> openssl genrsa -out client2.key 2048

Da PuTTYgen rilancio il comando Import key selezionando il nuovo file client2.key. Questa volta l'operazione va a buon fine. Tiro un sospiro di sollievo e vado oltre. Anche se la questione meriterebbe un approfondimento. Al centro compare la finestra contenente la chiave ssh-rsa. L'etichetta "Public key for pasting into OpenSSH authorized_keys file" mi suggerisce quale uso farne. Modifico il campo key comment e faccio un copia ed incolla della chiave OpenSSH nel file client2.ssh-rsa che poi copio nella home dell'utente pi sul server.

Passo alla shell ssh ed accodo la chiave OpenSSH al file ~/.ssh/authorized_keys:

$ cat client2.ssh-rsa >> .ssh/authorized_keys
$ rm client2.ssh-rsa

Il server è configurato per ricevere le connessioni ssh provenienti dal pc senza l'uso della password. Passo al client. Sempre da PuTTYGen salvo la chiave privata con estensione .ppk

L'ultimo passaggio riguarda la creazione della sessione in PuTTY. Seleziono la voce Connection > SSH > Auth e carico il file client2.ppk nel campo "Private key file for authentication". Ritorno alla pagina di configurazione e digito l'hostname nella forma Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo..4; poi salvo la sessione con il nome server1.roma13. Adesso è il momento della verità. Il tasto Open apre una shell ssh sul server.

Oggi proprio non pensavo di riuscirci. Tutto sommato è andata bene. Non mi resta che ricreare il certificato e ristablire la VPN. Dalla shell dos eseguo il comando:
> init-config.bat
Il risultato è la creazione del file vars.bat contenente i dati di esemprio relativi all'infrastruttura PKI. Quindi passo alla modifica di vars.bat come fatto a suo tempo sul server VPN con il file vars.

set KEY_SIZE=2048
set KEY_COUNTRY=IT
set KEY_PROVINCE=Roma
set KEY_CITY=Roma
set KEY_ORG=eshiol.it
set KEY_EMAIL=Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
set KEY_OU=roma13

> vars.bat

Creo la richiesta di certificato con il comando:
> openssl req -new -key client2.key -out client2.csr

e tramite WinSCP copio la richiesta nella cartella /etc/openvpn/easy-rsa/keys del server. Ritorno alla shell ssh e lancio il comando per generare il certificato a partire dalla richiesta appena copiata sul server:
$ ./sign-req client2
poi copio la coppia chiave/certificato nella cartella roma13 e riconnetto il client alla VPN.

Tutto sommato non è stato poi così difficile. L'aver creato chiave e certificato separatamente mi ha dato modo di sperimentare l'uso di openssl. Infatti easy-rsa altro non è che una raccolta di script che automatizzano le operazioni che manualmente andrebbero effettuate con i comandi openssl. C'è da dire anche che, per motivi di sicurezza, c'è chi sconsiglia l'uso di easy-rsa per la creazione dei certificati dei client direttamente sul server, ma suggerisce l'uso della procedura appena descritta. Forse è semplice paranoia.

Roma, ore 08:55. Il treno entra in stazione e si ferma, sono a Roma. Le porte si aprono e con loro i miei occhi che guardano smarriti lo schermo del client. Al centro campeggia la finestra "PuTTYgen Error".

 

Torna su