Autenticazione SSH con CIE e CNS

Autenticazione SSH con CIE o con CNS

Pubblicato il Pubblicato in Sicurezza, SSH, System administrator

l’Autenticazione SSH con chiave pubblica/privata è uno dei modi principali ed abbastanza sicuri per l’accesso ad un server remoto.

Se la chiave privata è su smart cart personale il processo risulta ancora più sicuro.

La chiave pubblica viene salvata nel server dove si ha accesso mentre quella privata, protetta da password, è salvata in genere localmente.

La password della chiave privata va custodita con cura, meglio se non scritta da nessuna parte.

Configurazione del server SSH

Per potersi autenticare con chiave pubblica/privata il server SSH dev’essere configurato con l’opzione:

PubkeyAuthentication yes

nel suo file di configurazione principale /etc/ssh/sshd_config.

Per rendere le modifiche operative va riavviato il server SSH:

sudo systemctl restart sshd

Configurazione del client per l’autenticazione SSH

Per la configurazione del client bisogna per prima cosa far funzionare il lettore di smart cart ad esempio per la CNS (Carta nazionale dei servizi) o quello RFID per la CIE (Carta d’identità elettronica).

Quindi se il lettore necessita di un driver è il caso di installarlo.

Normalmente per per le smart card e quindi per i lettore di CNS è sufficiente installare opensc e tutte le sue dipendenze mentre per la CIE bisogna avere un lettore RFID e quindi installare il pacchetto pcscd e la libreria interconnessa libccid.

Configurazione CIE per l’autenticazione SSH

Per configurare la CIE (Carta d’identità elettronica) bisogna installare i driver del vostro lettore RFID, a volte potrebbe bastare installare il pacchetto pcscd:

  • Su sistemi Ubuntu/Debian: sudo apt install pcscd;
  • mentre nei sistemi basati su RedHat 8+: sudo dnf install pcsc-lite;
  • infine su sistemi basati su RedHat <=7: sudo yum install pcsc-lite.

lanciare quindi:

systemctl start pcscd
systemctl enable pcscd

Verificare che il pacchetto pcscd rilevi il lettore RFID

Per verificare il funzionamento bisogna installare il pacchetto pcsc-tools:

  • Su sistemi Ubuntu/Debian: sudo apt install pcsc-tools;
  • mentre nei sistemi basati su RedHat 8+: sudo yum -y install epel-release && sudo yum repolist && sudo dnf install pcsc-tools;
  • infine su sistemi basati su RedHat <=7: sudo yum -y install epel-release && sudo yum repolist && sudo yum -y install pcsc-tools.

Assicurarsi di aver fatto partire il servizio pcscd come nel paragrafo sopra.

Inserire nel lettore la tessera CIE e lanciare il comando:

pcsc_scan

Installazione software per CIE

Una volta che i driver del lettore sono stati installati bisogna installare il software della CIE, cie-middleware dal sito ufficiale o direttamente dal repository pubblico su github.

Mentre sto scrivendo nel sito ufficiale di cie-middleware per Linux è presente la versione 1.4.2 ma la sua libreria interna libcie-pkcs11.so (utile per SSH) da dei problemi con dei simboli interni non presenti dovuti alla libreria libiconv che su Ubuntu/Debian e RedHat è interna alla glibc.

Quindi non è possibile utilizzare la versione attuale 1.4.x (almeno sino alla 1.4.2) se si vuole utilizzare la libreria libcie-pkcs11.so mentre l’interfaccia grafica funziona bene.
Per ora utilizziamo ancora l’ultima versione della 1.3 e cioè la 1.3.1.

In tal modo (utilizzando la precedente versione 1.3.1), però, non si avrà la possibilità di firmare digitalmente i documenti perché è una nuova funzione presente solo dalla versione 1.4.0.

Installato il pacchetto cie-middleware-linux dobbiamo, come da suo manuale, fare l’abbinamento della CIE dove verrà richiesto il codice completo di 8 cifre.

Quest’ultimo passaggio relativo all’abbinamento è obbligatorio altrimenti non sarà possibile estrarre la chiave pubblica SSH dalla CIE.

Configurazione CNS

Per configurare la CNS (Carta nazionale dei servizi) bisogna installare i driver del vostro lettore di smart card anche se dovrebbe bastare installare il pacchetto opensc:

  • Su sistemi Ubuntu/Debian: sudo apt install opensc;
  • mentre sui sistemi basati su RedHat 8+: sudo dnf install opensc;
  • infine sui sistemi basati su RedHat <=7: sudo yum install opensc.

Verificare che il pacchetto opensc sia in grado di rilevare la vostra CNS ed il lettore

Inserire la CNS nel lettore e verificare con il comando:

opensc-tool -n -a

Se opensc-tool non rileva la smart card e la CNS allora bisogna installare i propri driver.

Per poter utilizzare la CNS o CNS-TS (Carta Nazionale dei servizi con Tessera sanitaria) è necessario possedere i codici associati PIN e PUK.

Configurazione SSH client per l’autenticazione SSH

Per configurare la parte client di SSH all’uso di chiave pubblica/privata con CIE o CNS bisogna:

  • ricavare la chiave pubblica dalla CIE/CNS e quindi salvarla in remoto nella home dell’utente in cui ci vogliamo collegare;
  • utilizzare il comando giusto SSH per connetterci con la CIE/CNS oppure configurare l’ssh client per l’utilizzo della smart card.

Esaminiamo ora entrambe le parti della configurazione.

Ricavare le chiavi pubbliche della CIE/CNS

Per ricavare le chiavi pubbliche, per prima cosa, dobbiamo indicare le librerie da utilizzare:

  • per la CIE la libreria o Provider del certificato PKCS11 è /usr/local/lib/libcie-pkcs11.so;
  • mentre per la CNS la libreria o Provider del certificato PKCS11 per lettori compatibili con opensc è:
    • /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so su sistemi Ubuntu/Debian;
    • /usr/lib64/pkcs11/opensc-pkcs11.so su sistemi riconducibili a RedHat.

A questo punto per ricavare la chiave pubblica SSH bisogna lanciare il comando:

ssh-keygen -D <libreria o Provider del certificato PKCS11>

e quindi per concludere:

  • per la CIE il comando è: ssh-keygen -D /usr/local/lib/libcie-pkcs11.so >cie.pub;
  • mentre per la CNS su sistemi Ubuntu/Debian il comando è: ssh-keygen -D /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so >cns.pub;
  • per la CNS su sistemi RedHat il comando è: ssh-keygen -D /usr/lib64/pkcs11/opensc-pkcs11.so >cns.pub;

A questo punto la chiave pubblica è nel file cie.pub o cns.pub, controlliamo con:

cat c*.pub

Attenzione: per CIE prima bisogna abbinare la tessera altrimenti la chiave pubblica non verrà estratta.

Ora che abbiamo la chiave pubblica dobbiamo aggiungerla al file .ssh/authorized_keys dell’utente a cui vogliamo collegarci via SSH.

Supponendo di doverci connettere con l’utente user nel server remoto remoteserver, il modo più semplice è utilizzare il comando SSH:

ssh-copy-id -f -i c*.pub user@remoteserver

Utilizzo del comando SSH

Per utilizzare la smart card con CIE o CNS bisogna lanciare il comando SSH con:

ssh -o 'PKCS11Provider=<libreria o Provider del certificato PKCS11>' user@remoteserver

Per non dover digitare sempre il comando SSH in tal modo si può aggiungere il provider nel file $HOME/.ssh/config

echo 'PKCS11Provider=<libreria o Provider del certificato PKCS11>' >> $HOME/.ssh/config

Se utilizziamo la CIE/CNS solo per un server per non rallentare il comando SSH potremmo:

cat <<EOF >>$HOME/.ssh/config
Host remoteserver
  PKCS11Provider <libreria o Provider del certificato PKCS11>
EOF

Configurato il file $HOME/.ssh/config ci possiamo collegare semplicemente con:

ssh user@remoteserver

Nei comandi precedenti bisogna sostituire <libreria o Provider del certificato PKCS11> con la vostra libreria di smart card giusta, vedi elenco sopra.

Riferimenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.