Modificare il file crslinux.sh per usare il lettore di carte per firma digitale

Aperto da massimostringhi, Mercoledì 02 Ottobre 2019, 17:41:41

Discussione precedente - Discussione successiva

massimostringhi

Buongiorno a tutti,
uso linux mint da diversi anni, almeno otto (ora ho la Mint 19.2 a 64bit), ma non sono esperto e vi chiedo un aiuto perchè ho bisogno di usare un lettore di carte per la firma digitale.
Ho seguito le istruzioni sul sito della regione lombardia, sono ad un empasse, credo che dopo funzionerà tutto.
Praticamente devo modificare il file "crslinux.sh" con le istruzioni date ma non sono capace, vi scrivo qui sotto le istruzioni, la schermata del terminale che mi hanno richiesto e il file da modificare.

se siete così gentili da rispondermi con il file modificato ve ne sarei molto grato!!!

***istruzioni***
Rev. 04 – Manuale d'uso CRS Manager
Pagina 21 di 68LOMBARDIA INFORMATICA S.p.A.
Classificazione:pubblico

Alcune nuove distribuzioni Linux hanno modificato il percorso dove la java virtual machine si aspetta di trovare
la shared object che consente di accedere al lettore e questo fa sì che ad ogni tentativo di firma, cambio o
sblocco pin si ottenga l'errore "Nessun lettore trovato".
Per ovviare a questo è necessario modificare il file crsLinux.sh nel folder /opt/CRSManager/bin/ inserendo la property:
-Dsun.security.smartcardio.library=/lib/i386-linux-gnu/libpcsclite.so.1
Esempio:
java -Dsun.security.smartcardio.library=/lib/libpcsclite.so.1 -classpath.....
Per reperire il path corretto della s.o. libpcsclite, eseguire il comando:
sudo locate libpcsclite.so.1
Ed eventualmente far ripartire il servizio pscd. Il percorso ed i comandi indicati sono riferiti alla versione Ubuntu 13.04 a
32 bit.



     ***da terminale scrivo: sudo locate libpcsclite.so.1***
massimo@massimo-Aspire-5742G:~$ sudo locate libpcsclite.so.1
[sudo] password di massimo:     
/home/timeshift/snapshots/2019-09-26_21-00-01/localhost/usr/lib/x86_64-linux-gnu/libpcsclite.so.1
/home/timeshift/snapshots/2019-09-26_21-00-01/localhost/usr/lib/x86_64-linux-gnu/libpcsclite.so.1.0.0
/usr/lib/x86_64-linux-gnu/libpcsclite.so.1
/usr/lib/x86_64-linux-gnu/libpcsclite.so.1.0.0
massimo@massimo-Aspire-5742G:~$





     ***file crsLinux.sh***

#!/bin/bash

# Creazione e modifica di crsManager.properties
if [ ! -f $HOME/.crsmanager/crsManager.properties ]
  then
mkdir $HOME/.crsmanager
        cp /opt/CRSManager/prop/crsManager.properties $HOME/.crsmanager/
echo file.chooser.directory=$HOME >> $HOME/.crsmanager/crsManager.properties
fi

VERSION=`cat $HOME/.crsmanager/crsManager.properties | grep product.version`
if [ "$VERSION" == "" ]
  then
    echo "log.enabled=true
proxy.username=
product.version=4.8.00
auto.update=true
proxy.enabled=false
sign.cades=true
proxy.password=
proxy.host=
data.xml.digit.pa=2013-09-30T14\:17\:05+02\:00
auto.update.ca=true
digitpa.xml.url=https://applicazioni.cnipa.gov.it/TSL/IT_TSL_CNS.xml
file.chooser.directory=$HOME
proxy.port=" > $HOME/.crsmanager/crsManager.properties
   
fi

LBITS=`getconf LONG_BIT`
LIB=`cat $HOME/.crsmanager/crsManager.properties | grep path.library`

if [ $LBITS = '64' ]
then
    if [ "$LIB" == "" ]
then
if [ -f /usr/lib/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
fi

if [ -f /usr/lib64/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib64/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
        fi

if [ -f /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
        fi
   fi

else
    if [ "$LIB" == "" ]
        then
if [ -f /usr/lib/bit4id/libbit4spki.so ]
     then
      echo "path.library=/usr/lib/bit4id/libbit4spki.so" >> $HOME/.crsmanager/crsManager.properties
fi

if [ -f /usr/lib/opensc-pkcs11.so ]
     then
      echo "path.library=/usr/lib/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
fi

if [ -f /usr/lib/i386-linux-gnu/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib/i386-linux-gnu/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
        fi

if [ -f /usr/lib/i386-linux-gnu/bit4id/libbit4spki.so ]
             then
              echo "path.library=/usr/lib/i386-linux-gnu/bit4id/libbit4spki.so" >> $HOME/.crsmanager/crsManager.properties
        fi

    fi
fi


# controllo se valorizzato correttamente
LIB=`cat $HOME/.crsmanager/crsManager.properties | grep path.library`
if [ "$LIB" == "" ]
  then
echo "Errore: non e' presente il software CRS per l'accesso alla smartcard."
        echo "E' possibile configurare manualmente il file:"
        echo "$HOME/.crsmanager/crsManager.properties"
        echo "indicandone in path.library il percorso (es. path.library=/usr/lib/opensc-pkcs11.so)"
echo ""
        exit 0 
fi

# lancia l'esecuzione in base all'architettura del s.o.
cd /opt/CRSManager/bin

if [ $LBITS = 32 ]
then
java -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so32 it.lisit.smartcard.gui.CRSManagerGui &
  else
  java -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so64 it.lisit.smartcard.gui.CRSManagerGui &
fi


---------------------------------------
grazie mille!!

Massimo

midnite

Ciao, sono col cel e mi trovo un po in difficoltà col verificare e modificare il file... Posso però provare ad indicarti come procedere:
Fai uma copia di backup del file da modificare
cd /opt/CRSManager/bin/
sudo cp crsLinux.sh crsLinux.sh.old

E a questo punto lo apri in modifica col tuo editor
sudo xed crsLinux.sh
e modidichi il percorso vecchio con quello che hai trovato tu:
/usr/lib/x86_64-linux-gnu/libpcsclite.so.1

Ma non ci sono iatruzioni più aggiornate? Quelle fanno riferimento a ubuntu del 2013 (nemmeno una LTS)

andrea111

#2
In effetti le istruzioni che danno sono un po' "stringate".

Il riferimento che danno riguarda le linee che iniziani con "java".

Io lo interpreto così:
individuare le righe in crsLinux.sh che inizano con "java", ne vedo due in fondo, queste
Citazionejava -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so32 it.lisit.smartcard.gui.CRSManagerGui &
che riguarda i sistemi a 32 bit, e
Citazionejava -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so64 it.lisit.smartcard.gui.CRSManagerGui &
che riguarda i sistemi a 64 bit.

Seguendo le stringate istruzioni che danno, dovresti aggiungere dopo il "java" iniziale quello che loro hanno indicato, cioè farle diventare così:
la prima riga java -Dsun.security.smartcardio.library=/usr/lib/i386-linux-gnu/libpcsclite.so.1 -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so32 it.lisit.smartcard.gui.CRSManagerGui & per il 32 bit
e nella successiva, per i 64 bit:
java -Dsun.security.smartcardio.library=/usr/lib/x86_64-linux-gnu/libpcsclite.so.1 -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so64 it.lisit.smartcard.gui.CRSManagerGui &

Se fai il copia/incolla (consigliato) per sostituire le righe, assicurati di copiare tutta la riga e, quando incolli, di sostituire l'intera riga in modo da non lasciare "sbavature" che bloccherebbero l'esecuzione del file.

Bada bene di lavorare solo sulle due righe in oggetto, tutto il resto deve restare immutato.

Il risultato finale sarebbe questo: file crsLinux.sh modificato (spero non ci siano sbavature)

  ***file crsLinux.sh***

#!/bin/bash

# Creazione e modifica di crsManager.properties
if [ ! -f $HOME/.crsmanager/crsManager.properties ]
  then
mkdir $HOME/.crsmanager
        cp /opt/CRSManager/prop/crsManager.properties $HOME/.crsmanager/
echo file.chooser.directory=$HOME >> $HOME/.crsmanager/crsManager.properties
fi

VERSION=`cat $HOME/.crsmanager/crsManager.properties | grep product.version`
if [ "$VERSION" == "" ]
  then
    echo "log.enabled=true
proxy.username=
product.version=4.8.00
auto.update=true
proxy.enabled=false
sign.cades=true
proxy.password=
proxy.host=
data.xml.digit.pa=2013-09-30T14\:17\:05+02\:00
auto.update.ca=true
digitpa.xml.url=https://applicazioni.cnipa.gov.it/TSL/IT_TSL_CNS.xml
file.chooser.directory=$HOME
proxy.port=" > $HOME/.crsmanager/crsManager.properties
   
fi

LBITS=`getconf LONG_BIT`
LIB=`cat $HOME/.crsmanager/crsManager.properties | grep path.library`

if [ $LBITS = '64' ]
then
    if [ "$LIB" == "" ]
then
if [ -f /usr/lib/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
fi

if [ -f /usr/lib64/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib64/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
        fi

if [ -f /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
        fi
   fi

else
    if [ "$LIB" == "" ]
        then
if [ -f /usr/lib/bit4id/libbit4spki.so ]
     then
      echo "path.library=/usr/lib/bit4id/libbit4spki.so" >> $HOME/.crsmanager/crsManager.properties
fi

if [ -f /usr/lib/opensc-pkcs11.so ]
     then
      echo "path.library=/usr/lib/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
fi

if [ -f /usr/lib/i386-linux-gnu/opensc-pkcs11.so ]
             then
              echo "path.library=/usr/lib/i386-linux-gnu/opensc-pkcs11.so" >> $HOME/.crsmanager/crsManager.properties
        fi

if [ -f /usr/lib/i386-linux-gnu/bit4id/libbit4spki.so ]
             then
              echo "path.library=/usr/lib/i386-linux-gnu/bit4id/libbit4spki.so" >> $HOME/.crsmanager/crsManager.properties
        fi

    fi
fi


# controllo se valorizzato correttamente
LIB=`cat $HOME/.crsmanager/crsManager.properties | grep path.library`
if [ "$LIB" == "" ]
  then
echo "Errore: non e' presente il software CRS per l'accesso alla smartcard."
        echo "E' possibile configurare manualmente il file:"
        echo "$HOME/.crsmanager/crsManager.properties"
        echo "indicandone in path.library il percorso (es. path.library=/usr/lib/opensc-pkcs11.so)"
echo ""
        exit 0
fi

# lancia l'esecuzione in base all'architettura del s.o.
cd /opt/CRSManager/bin

if [ $LBITS = 32 ]
then
java -Dsun.security.smartcardio.library=/usr/lib/i386-linux-gnu/libpcsclite.so.1 -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so32 it.lisit.smartcard.gui.CRSManagerGui &
  else
  java -Dsun.security.smartcardio.library=/usr/lib/x86_64-linux-gnu/libpcsclite.so.1 -classpath ../lib/iaik_jce_full.jar:../lib/commons-httpclient-2.0-beta2.jar:../lib/ldap.jar:../lib/firmacns.jar:../lib/bcmail-jdk16-146.jar:../lib/bcprov-jdk16-146.jar:../lib/iaikPkcs11Wrapper.jar:../lib/sissweb.jar:../lib/jdom.jar:../lib/iaik_cms.jar:../lib/iaikPkcs11Provider.jar: -Djava.library.path=../iaik_so64 it.lisit.smartcard.gui.CRSManagerGui &
fi

Portatile ASUS con Scheda madre X55C +i5-3210M -- 6 GB RAM ddr3 -- grafica intel.

massimostringhi

grazie mille dell'aiuto ma..purtroppo ancora non funziona..
nel dubbio ho provato a modificare il percorso anche all'interno della riga, non solo all'inizio, ma non cambia nulla. mando una mail anche al sito della Regione, potrebbero fare un aggiornamento dopo così tanti anni ed ora che le distribuzioni più diffuse sono sicuramente a 64bit!!

grazie ancora se qualcun altro vuol provare a modificare il file..

andrea111

Parla in termini di errore riportato: prima era
Citazioneerrore "Nessun lettore trovato"
Dovresti confermarmelo.

Che errore riporta ora con il file modificato? (c'è un errore? riportalo)

Provato a lanciare l'applicazione da terminale?
Da terminale vedi passo passo lo sviluppo dell'applicazione, ed a un certo punto (dove intercetta un errore), si ferma.
Devi riportare le ultime righe al momento del blocco.

Un altro spunto: quando hai dato
Citazionesudo locate libpcsclite.so.1
hai ottenuti due risposte valide:
Citazione/usr/lib/x86_64-linux-gnu/libpcsclite.so.1
/usr/lib/x86_64-linux-gnu/libpcsclite.so.1.0.0
noi l'abbiamo fatto solo con la prima di queste, sarebbe da provare con la seconda : libpcsclite.so.1.0.0 invece di libpcsclite.so.1 (sono due file differenti).

Portatile ASUS con Scheda madre X55C +i5-3210M -- 6 GB RAM ddr3 -- grafica intel.

massimostringhi

dice sempre "nessun lettore rilevato" e anche con il secondo file che ha trovato.
Se provo ad aprire col terminale, la schermata del terminale compare solo per un istante e poi scompare...

andrea111

È un file piccolo con poche linee, si può provare ad eseguirle singolarmente per esaminarne la risposta.
Es. controllare la presenza dei file necessari, posta ls -al ~/.crsmanager e
cat ~/.crsmanager/crsManager.properties | grep product.version
e anche cat ~/.crsmanager/crsManager.properties

Potrebbe esserci un file di log, intanto posta che vediamo se c'è.

Portatile ASUS con Scheda madre X55C +i5-3210M -- 6 GB RAM ddr3 -- grafica intel.

massimostringhi

ciao,
ecco la schermata del terminale con i comandi che mi avete indicato:


massimo@massimo-Aspire-5742G:~$ ls -al ~/.crsmanager
totale 12
drwxrwxr-x  2 massimo massimo 4096 set 30 23:40 .
drwxr-xr-x 44 massimo massimo 4096 ott 23 18:21 ..
-rw-rw-r--  1 massimo massimo  410 set 30 23:41 crsManager.properties
massimo@massimo-Aspire-5742G:~$ cat ~/.crsmanager/crsManager.properties | grep product.version
product.version=4.8.00
massimo@massimo-Aspire-5742G:~$ cat ~/.crsmanager/crsManager.properties
#Mon Sep 30 23:41:06 CEST 2019
path.library=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
proxy.port=
proxy.enabled=false
product.version=4.8.00
proxy.username=
auto.update.ca=true
auto.update=true
proxy.host=
digitpa.xml.url=https\://applicazioni.cnipa.gov.it/TSL/IT_TSL_CNS.xml
log.enabled=true
sign.cades=true
proxy.password=
data.xml.digit.pa=2013-09-30T14\:17\:05+02\:00
file.chooser.directory=/home/massimo
massimo@massimo-Aspire-5742G:~$


grazie mille. Son passati un po' di giorni ed ho dovuto risolvere velocemente da un altro pc, con windows, ma vorrei comunque venirne a capo!!

andrea111

Posta ancora sudo locate opensc-pkcs11.so
sudo locate libbit4spki.so


Da firefox immetti nella barra degli indirizzi questo indirizzo: https://applicazioni.cnipa.gov.it/TSL/IT_TSL_CNS.xml

A che pagina ti porta?

Se sono corretti anche questi non resta che verificare la versione di java che hai installato. (di java esiste sia la versione "open" che e la versione "closed").

Portatile ASUS con Scheda madre X55C +i5-3210M -- 6 GB RAM ddr3 -- grafica intel.

massimostringhi

eccomi,
la schermata del terminale:
massimo@massimo-Aspire-5742G:~$ sudo locate opensc-pkcs11.so
[sudo] password di massimo:     
/home/timeshift/snapshots/2019-10-26_21-00-01/localhost/usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so
/home/timeshift/snapshots/2019-10-26_21-00-01/localhost/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
/home/timeshift/snapshots/2019-10-26_21-00-01/localhost/usr/lib/x86_64-linux-gnu/pkcs11/onepin-opensc-pkcs11.so
/home/timeshift/snapshots/2019-10-26_21-00-01/localhost/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so
/usr/lib/x86_64-linux-gnu/onepin-opensc-pkcs11.so
/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
/usr/lib/x86_64-linux-gnu/pkcs11/onepin-opensc-pkcs11.so
/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so
massimo@massimo-Aspire-5742G:~$ sudo locate libbit4spki.so
massimo@massimo-Aspire-5742G:~$



(non trova il secondo comando?
mentre la pagina di firefox, mi porta ad una schermata con scritto : Attenzione: potenziale rischio per la sicurezza

andrea111

Citazione(non trova il secondo comando?
Non è un comando, è un file binario (di solito un driver) e bisognerebbe sapere quanto è essenziale la sua presenza per il funzionamento del sistema. Magari è solo un accessorio non essenziale.
Sarebbe da chiarire con quelli che ti hanno fornito il lettore.

Portatile ASUS con Scheda madre X55C +i5-3210M -- 6 GB RAM ddr3 -- grafica intel.

andrea111

Rileggendo il crsLinux.sh vedo che il file libbit4spki.so serve solo per il 32 bit (tu hai il 64), per cui sarebbe tutto OK da questo punto di vista.

Resta da vedere se hai installato la versione java della Oracle (proprietaria) o la versione open.
Alcune app richiedono la proprietaria per funzionare.

Portatile ASUS con Scheda madre X55C +i5-3210M -- 6 GB RAM ddr3 -- grafica intel.