Ciao a tutti, avendo poco tempo mi sono preso appunti man mano che procedevo e ho creato questa miniguida che potrebbe essere utile anche ad altri. Ho cercato nella documentazione per capire come vedere se la CNS viene riconosciuta ancora prima di mettere il PIN, quanti tentativi sono ancora a disposizione, ...
Ho cercato di raccogliere qui la mia esperienza per far funzionare la CNS come metodo di autenticazione utilizzando i driver liberi con la patch di 3v1n0. Premetto che non sono un esperto nel settore e quindi ognuno esegue a suo rischio e pericolo quanto qui indicato (in pratica se si sbaglia il PIN tre volte viene bloccato e per sbloccarlo bisogna usare il PUK. Però se i driver non funzionano correttamente potrebbe essere che il PIN corretto non venga riconosciuto e quindi potrebbe bloccarsi. Inoltre se si blocca il PUK, per errori multipli, se non ho capito male, bisogna rivolgersi a chi emette la CNS per farsela riabilitare. Inoltre non so se ci siano operazioni che potrebbero "danneggiare" la CNS). Quanto qui indicato funziona con Debian testing (Bookworm), ma non con la stable (Bullseye) e quindi presuppongo non funzioni anche per le precedenti stable, mentre presuppongo funzioni per unstable (Sid). Purtroppo non si può portare quanto ottenuto con testing su stable poiché è necessaria una versione di libc più recente. Una soluzione può essere quella di crearsi una live con Debian testing o installare Debian testing su un PC o, in dual boot, installare Debian testing sul PC. Per stable ho visto che cambia la libreria libssl 1.1.1, in testing c'è una versione leggermente superiore e poi cambiano le libc e di sicuro il compilatore. Appena avrò tempo proverò a fare una prova per vedere se è possibile installare la libreria libssl 1.1.1 presente in testing su stable e rifare la compilazione con questa, magari basta questa piccola modifica... Se qualcuno ha tempo potrebbe anche analizzare come mai il compilato per stable non riconosce la carta per l'autenticazione. Infine con questa procedura su Debian testing dovrebbero funzionare per le seguenti CNS: AC 2013 AC 2014 AC 2018 ACx 2021 ACe 2021 OT 2015 OT 2016 OT 2015 ID 2019 Io ho testato per ACx 2021 e AC 2014 Non ho idea se funziona anche per queste: ST 2021 ST 2022 Notare che la carta può essere usata per diversi scopi ed è possibile che i driver funzionino per alcuni, ma non per altri. Qui ho soltanto verificato la possibilità di usare il servizio di autenticazione tramite PIN. ATTENZIONE: se rispondete a questa mail indicando i risultati ai comandi con la vostra CNS eliminate tutte le parti identificative della CNS usata e del proprietario o per lo meno tutte quelle parti non necessarie a far capire il problema ******************************* A) compilazione alla debian way ******************************* A.1) installare le dipendenze necessarie per la ricompilazione # apt build-dep opensc A.2) creazione directory per la compilazione $ mkdir ~/src $ cd /src $ apt source opensc purtroppo le modifiche fatte da 3v1n0 sono su sorgenti in lavorazione e non mi ci sono messo a cercare di portarli alla versione presente in Debian (copiando semplicemente i file modificati non funziona). A.3) estrazione della versione creata da 3v1n0 $ git clone https://github.com/3v1n0/OpenSC.git $ cd OpenSC A.4) debianizzazione della versione di 3v1n0 (non sono sicuro al 100% che questa operazione sia sicura/funzionante) $ cp -R ../opensc-0.22.0/debian . A.5) compilazione alla Debian way $ fakeroot debian/rules binary *************************************** B) installazione dei pacchetti prodotti *************************************** # cd ~/src # apt install ./opensc_0.22.0-2_amd64.deb ./opensc-pkcs11_0.22.0-2_amd64.deb notare che è presente una versione successiva solo binaria in testing, la 0.22.0-2+b1 questo vuol dire che al prossimo upgrade quanto qui installato verrà sostituito se si verifica che la CNS funziona correttamente, con i passi successivi, allora è possibile impedire l'upgrade dei due pacchetti con il comando: # apt-mark hold opensc opensc-pkcs11 per riabilitare l'upgrade è sufficiente dare il seguente: # apt-mark unhold opensc opensc-pkcs11 ******************* C) test di verifica ******************* Ho usato questi test per capire eventuali problemi a che livello si pongano. Qui riporto solo quelli usati per poi effettuare l'autenticazione con la carta. C.1) inserire il lettore e verificare che lo riconosca $ opensc-tool --list-readers -v # Detected readers (pcsc) Nr. Card Features Name 0 No ACS ACR38U 00 00 Questo indica che il lettore è stato riconosciuto, se non viene riconosciuto si dovrebbe avere un errore del tipo: No smart card readers found. C.2) inserire la tessera nel lettore e verificare che venga vista $ opensc-tool --list-readers -v # Detected readers (pcsc) Nr. Card Features Name 0 Yes ACS ACR38U 00 00 [...cut...] CNS card C.3) ulteriore verifica $ opensc-tool -n Using reader with a card: ACS ACR38U [...] CNS card C.4) verificare che i driver installati siano funzionanti per autenticarsi con la CNS $ pkcs15-tool --list-pins -v Using reader with a card: ACS ACR38U 00 00 Connecting to card in reader ACS ACR38U 00 00... [...] Using card driver Italian CNS. Trying to find a PKCS#15 compatible card... Found NOME COGNOME! Card has 0 Authentication object(s). se esce così (come esce su stable), allora vuol dire che i driver non sono funzionanti. $ pkcs15-tool --list-pins Using reader with a card: ACS ACR38U 00 00 PIN [PIN CNS1] [...] PIN [PUK CNS1] [...] Se invece esce così (una sezione per il PIN e una per il PUK) vuol dire che i driver sono funzionanti e la CNS può essere usata per autenticarsi. *********************************************************************** D) verifica che il PIN non sia bloccato e se è bloccato come sbloccarlo *********************************************************************** $ pkcs15-tool --list-pins PIN [PIN CNS1] [...] Tries left : 0 PIN [PUK CNS1] [...] Tries left : 0 Notare che qui dovrebbero essere indicati anche i tentativi restanti sia per il PIN che per il PUK, ma a me viene visualizzato 0... e io interpreto come se avessi esaurito tutti i tentativi, mentre penso debba essere visualizzato 3. In rete ho trovato che "This should show tries-left for each PIN. tries-left : 0 means pin is blocked.", ma a me visualizza 0 e la carta non è bloccata, ma funzionante. Notare che se la carta è bloccata e si cerca di autenticarsi ad un sito web viene richiesto il PIN, non viene permesso l'ingresso, ma non viene visualizzato il motivo, cioè non è indicato esplicitamente che il PIN è bloccato (così era successo a me tempo fa). Per avere il messaggio che indica che il PIN è bloccato, visto che con il comando precedente almeno a me non ritorna un risultato corretto penso bisogni effettuare un'operazione a riga di comando, ad esempio eseguire un test di inserimento PIN o firmare un documento (richiede il PIN), ... e passare sempre -v come parametro. Una volta inserito il PIN si dovrebbe avere il messaggio di errore che il PIN è bloccato. Per sbloccarlo (non l'ho provato) dovrebbe essere il seguente comando: pkcs15-tool --unblock-pin --puk $PUK --new-pin $NEW_PIN Dove $PUK è il PUK della CNS e $NEW_PIN è il nuovo PIN che si vuole impostare. ATTENZIONE: se si sbaglia il PUK (penso per 3 volte) la CNS viene bloccata e probabilmente bisogna richiedere la riattivazione o la sostituzione. Sarebbe interessante sapere se qualcuno che ha installato i driver del ministero o altri ha lo stesso problema sul numero di tentativi rimasti. Se è così si può aprire un bug report. *********************** E) esecuzione auto-test *********************** sono dei test di diagnostica, eseguiti con il comando pkcs11-tool, ci sono due tipi: E.1) verifica che tutto funzioni con l'inserimento a caldo del lettore e CNS (usare anche -v per ulteriori dettagli). Si può inserire togliere la tessera e mettere diverse tessere (ad esempio la vecchia e la nuova) $ pkcs11-tool --test-hotplug -v [...] token flags : [...] user PIN locked [...] quindi c'è un errore, non intercetta il valore corretto per i tentativi rimanenti. Lo stesso sulla tessera vecchia. E.2) test vari, maggiori test si possono ottenere usando anche l'opzione --login o --pin $ pkcs11-tool -tv $ pkcs11-tool -tv --login la seconda mi dice: WARNING: user PIN locked però mettendo il PIN poi fa i test ed è tutto ok L'importante è che in fondo ci sia la scritta: No errors ****************************************** F) configurare in Firefox l'uso dei driver ****************************************** Questa operazione deve essere fatta solo una volta: * Aprire Firefox * Modifica -> Impostazioni -> Privacy e sicurezza -> Dispositivi di sicurezza (è il bottone in fondo a destra della pagina) * Carica * come "Nome modulo" può essere messo quello che si vuole, ad esempio "CNS PKCS#11" * come "Nome file modulo" bisogna indicare dove è la libreria: /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so ************************************* G) autenticarsi con la CNS in Firefox ************************************* andare su un sito web, es: https//www.inps.it e fare l'accesso con CNS. Se non viene richiesto il PIN e viene visualizzato un errore, allora eseguire in sequenza una delle seguenti e poi riprovare ad autenticarsi, se non funziona provare con la successiva (questo problema di solito capita quando si sono appena installati i driver o si è appena configurato Firefox ad usarli): G.1) riavviare i servizi # systemctl restart pcscd pcscd.socket G.2) chiudere e riaprire il browser (tutte le istanze di Firefox) G.3) riavviare la sessione o la macchina (questo non dovrebbe mai essere necessario) Ciao Davide -- La mia privacy non è affar tuo https://noyb.eu/it