Segnalo che configurando Firefox per l’accesso ad un servizio online, questo crasha quando confermo, nella finestra “Carica” di “Dispositivi di sicurezza”, i dati indicati dal manuale (Nome modulo: CIE PKI, Nome file modulo: /usr/local/lib/libcie-pkcs11.so).
Cercando su internet ho trovato questa possibile soluzione
opened 12:31PM - 29 Mar 21 UTC
closed 02:17PM - 17 Sep 21 UTC
Questo non è un vero e proprio issue, perchè ho già la soluzione e volevo condiv… idere tutti i problemi che ho riscontrato.
Volevo raccontare la mia storia su questo progetto. Avevo un smartphone android 8 su cui funzionava l'app CIE, così non ho mai usato l'autenticazione tramite pc ma sempre tramite android molto più semplice e senza dover usare nulla se non un app. Con android 10 l'app ha smesso di funzionare, ma questo è un altro problema, così eccomi qui a dover usare questo progetto.
Ho una debian 10, dove uso firefox scaricato dal sito mozilla.org, per molte cose usare vecchie versioni nello stile di debian è comodo, ma a volte come firefox non va bene così preferisco scaricare la versione dal sito.
Proprio questo mi ha portato a dover affrontare dei crash di firefox quando ho dovuto caricare la libreria libcie-pcks11.so.
Ho cominciato a ricompilare e provare a caricare su firefox ma la libreria non si caricava neanche, dopo un po' di analisi ho scoperto che il suggerimento dato in un altro issue di cancellare il file libcryptopp.a ed usare il pacchetto libcrypto++-dev era sbagliato perchè su debian 10 e distribuzioni simili come ubuntu 20.10 la versione di cryptopp è troppo vecchia così ci sono dei simboli non risolti.
Ho fatto il fork del progetto ed ho cominciato a correggere i problemi. [Qui](https://github.com/etmatrix/cie-middleware-linux/commit/27d52d7b9d0c2a8be7298873a5d6a152dc4d1adc) c'è la versione 8.2 della libreria libcryptopp compilata staticamente così da non avere dipendenze con le distribuzioni, basta decomprimerla con `xz -d `, [qui](https://github.com/etmatrix/cie-middleware-linux/commit/bee48be7f4f767ce79b2df8066f5b38d171b32a5) invece c'è la nuova configurazione del progetto eclipse in modo che la configurazione Release funziona ed inoltre nel linker c'è il parametro `-Wl,-z,defs` così sappiamo subito se ci sono simboli non risolti nella libreria cryptopp. In eclipse cdt si può impostare di usare un builder esterno, così verranno creati i file da usare per il make, così potrete usare i classici `make clean` e `make` non c'è `configure` o `cmake` ma almeno si potrà compilare da riga di comando.
Ma veniamo alla soluzione del crash di firefox, il problema è molto strano, con le versioni di firefox compilate da debian o da fedora il caricamento della libreria distribuita sul sito ufficiale va a buon fine, ma con la versione distribuita da firefox c'è un problema con la libreria standard delle espressioni regolari, questa funzione
`std::regex_search(path, match, std::regex("^/(home|root)/"));`
manda in crash firefox. La stessa funzione chiamata da java o da un semplice programma scritto in c++ non da problemi.
Ho aperto un [issue](https://bugzilla.mozilla.org/show_bug.cgi?id=1701658) a firefox per questo, comunque per il momento ho risolto in maniera semplice ho rimosso in questa [commit](https://github.com/etmatrix/cie-middleware-linux/commit/2d5d2bd93df328e38e349b2b08893f24e92e36bf) tutte (totale 2) le chiamate a std::regex_search, tanto è del codice inutile che controlla se nella variabile d'ambiente HOME è presente uno slash alla fine, in caso positivo getta un'eccezione. Alla fine a noi non importa nulla, se nella variabile d'ambiente è presente uno slash alla fine possiamo aggiungerne un altro e su linux verrà semplicemente ignorato.
Infine c'è un altro bug che ho corretto [qui](https://github.com/etmatrix/cie-middleware-linux/commit/0795346441074ddea1d238202d8334ff25b0344e) sulla funzione GetNewSessionID, nella conversione da windows a linux hanno tolto InterlockedIncrement ma si sono dimenticati di far tornare il valore incrementato, infatti viene incrementato e rimane li, in alcuni casi questo da errore, non è successo sempre e non so quando succede, comunque nel dubbio l'ho corretto ed ho usato la funzione builtin di gcc e g++ per incrementare in sicurezza la variabile e tornare il valore a chi lo ha chiesto. Per questo forse vale la pena fare una PR.
La pacchetizzazione di questo progetto non mi interessa, perchè comunque all'interno del sorgente ci sono dei path cablati, che obbligano a mettere la so dentro /usr/local/lib e tenere il jar dentro /usr/share/CIEID/.
Io preferisco tenere il tutto dentro una directory e caricare la so su firefox dalla directory dedicata, tutto senza usare root per scrivere i file.
Alla fine basta lanciarlo così:
`java -Djna.library.path="$PWD" -classpath "$PWD/cieid.jar" it.ipzs.cieid.MainApplication
`
aggiungere la carta CIE dall'applicazione java che scriverà delle informazioni dentro $HOME/.CIEPKI/<file>.cache e che verranno usate dalla libreria so in firefox.
ma non è alla portata dell’utente finale ne mia.
Sistema:
Sistema Operativo: Linux Mint 20.1 Cinnamon
Kernel: 5.4.0-73-generic x86_64 bits
Firefox 97.0.1
Come è possibile ottenere una Cie-middleware-linux che risolva il problema?
“Soluzione” assolutamente impraticabile !
Personalmente ho risolto utilizzando Chrome al posto di Firefox dopo aver seguito i consigli che ho trovato in questo forum al seguente link: La CIE via lettore SmartCard su Chrome e Chromium - n°2 da GiP .
Ho aperto il terminale di linux e “copincollato” le istruzioni una ad una, dopodichè Chrome mi ha permesso di fare il login.
Auguri a tutti.
Grazie mille,
provo anche se in quel link si parla di lettore di smart Card mentre io ho un lettore NFC.
Lino
Ho provato con Chrome, Chromium, Brave, Opera, tutte con esito positivo.
Firefox invece non va, poco male.
Riepilogo:
Sistema Operativo: Linux Mint 20.1 Cinnamon
Kernel: 5.4.0-73-generic x86_64 bits
Lettore NFC: ACS ACR1252
Grazie ancora
Lino