Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: tito_livio - Aprile 05, 2023, 12:13:22 pm

Titolo: Firma digitale documenti pdf
Inserito da: tito_livio - Aprile 05, 2023, 12:13:22 pm
Buongiorno a tutti,
avrei bisogno di firmare digitalmente dei documenti pdf da programma, avrei risolto ma in un modo che ritengo farraginoso.
La situazione è questa:
-Non si tratta però di un documento ogni tanto ma di 50-100 documenti prodotti al giorno, quindi non posso far digitare ogni volta la password ma vorrei
 che l'utente battesse una volta sola la password quando apre il programma;
-Il certificato è quello che sta dentro il pennino che rilascia la Camera di Commercio oppure Aruba;
-I pdf sono prodotti dal programma stesso;
-Lanciando programmi esterni trovati in rete,  si può firmare ma non mi è stato possibile passargli la password come parametro, con questo tipo di certificato non funziona.
Avete qualche idea o esperienza in merito?
Grazie anticipatamente a tutti.
Titolo: Re:Firma digitale documenti pdf
Inserito da: bonmario - Aprile 05, 2023, 12:55:08 pm
Ciao,
non conosco l'argomento, per cui se ti dovesse arrivare una risposta più intelligente, ignora quello che scrivo !!!

Se riesci ad individuare e portare in primo piano la finestrella in cui l'utente dovrebbe scrivere la password, puoi farla scrivere tu dal programma: con Lazarus puoi simulare la pressione dei tasti della tastiera, tramite il componente aggiuntivo "MouseAndKeyInput".


Ciao, Mario
Titolo: Re:Firma digitale documenti pdf
Inserito da: tito_livio - Aprile 05, 2023, 01:07:52 pm
Ciao,
non conosco l'argomento, per cui se ti dovesse arrivare una risposta più intelligente, ignora quello che scrivo !!!

Se riesci ad individuare e portare in primo piano la finestrella in cui l'utente dovrebbe scrivere la password, puoi farla scrivere tu dal programma: con Lazarus puoi simulare la pressione dei tasti della tastiera, tramite il componente aggiuntivo "MouseAndKeyInput".


Ciao, Mario

Interessante!
Titolo: Re:Firma digitale documenti pdf
Inserito da: xinyiman - Aprile 05, 2023, 01:19:38 pm
Ciao,
non conosco l'argomento, per cui se ti dovesse arrivare una risposta più intelligente, ignora quello che scrivo !!!

Se riesci ad individuare e portare in primo piano la finestrella in cui l'utente dovrebbe scrivere la password, puoi farla scrivere tu dal programma: con Lazarus puoi simulare la pressione dei tasti della tastiera, tramite il componente aggiuntivo "MouseAndKeyInput".


Ciao, Mario

Strada pericolosetta. Se per qualche motivo la finestra non sale come top position son dolori.
Titolo: Re:Firma digitale documenti pdf
Inserito da: bonmario - Aprile 05, 2023, 01:28:49 pm
Strada pericolosetta. Se per qualche motivo la finestra non sale come top position son dolori.

Certo, la cosa va valutata bene, ma da quello che c'è scritto nel primo post, io capisco che l'utente che dovrebbe digitare la password è lo stesso che lancia il suo programma, quindi lui la password la sa già !!!
L'unico rischio che mi viene in mente, è che invece di scrivere la password dove dovrebbe, il programma la scriva nella finestra sbagliata, come blocco note, edito o cose simili, ed in quel momento passa qualcuno alle sue spalle e la vede

Ciao, Mario
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 02:32:32 pm
Ciao, mi stavo cimentando anche io nella cosa (ho la chiavetta della CCIAA) sempre nel concetto della firma digitale ma pure per l'autenticazione della persona.

Sono per adesso arrivato tramite le API di Windows a riconoscere la chiavetta (o meglio il dispositivo generico) e a capire che ci sono le firme (anche ad elencarle). Poi non avevo più tempo da dedicarci e ho messo in parcheggio il tutto.

Simili cose le ho già fatte, basterebbe cercare con un programma SPY qualsiasi l'identificativo della finestra (nome, classe, etc ...) e poi con l'API FindWindowEx (e funzioni affini) ricercarla dall'eseguibile.

Non è complesso, anzi ...

Vedo di postare qualcosa.
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 02:56:44 pm
Ehm ... sarebbe banale, ma la finestra può essere identificata solo ed esclusivamente se si opera con privilegi elevati (cioè non solo user appartenente al gruppo amministratori, ma anche con elevazione dei privilegi).

Si potrebbe tentare di impersonare un "amministratore" direttamente dal programma, ma non sò se ciò sia sufficiente, comunque credo che ciò non sia possibile nella maggiora parte delle casistiche (ad esempio se il programma deve girare in azienda .... o in un ufficio pubblico).

Questo usando FireFox, occorre vedere se usando il tool esterno invece di firefox (come tu indicavi) sia possibile identificare la finestra senza privilegi.

Ciao
Titolo: Re:Firma digitale documenti pdf
Inserito da: nomorelogic - Aprile 05, 2023, 03:15:31 pm
non conosco l'argomento ma credo che il tutto dovrebbe essere compatibile con comandi openssl
nel senso che se si trovasse il modo di mettere le firme con linea di comando (usando openssl) già si sarebbe un passo avanti: basterebbe fare un wrapper

fatto il wrapper basta capire quali funzioni vengono usate da openssl per poi tentare di farlo con lazarus/free pascal

Edit:
se il certificato è tipo x509, si potrebbe provare a partire da quanto riportato qua
https://stackoverflow.com/questions/10782826/digital-signature-for-a-file-using-openssl#18359743 (https://stackoverflow.com/questions/10782826/digital-signature-for-a-file-using-openssl#18359743)
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 03:44:22 pm
non conosco l'argomento ma credo che il tutto dovrebbe essere compatibile con comandi openssl
nel senso che se si trovasse il modo di mettere le firme con linea di comando (usando openssl) già si sarebbe un passo avanti: basterebbe fare un wrapper

fatto il wrapper basta capire quali funzioni vengono usate da openssl per poi tentare di farlo con lazarus/free pascal

Edit:
se il certificato è tipo x509, si potrebbe provare a partire da quanto riportato qua
https://stackoverflow.com/questions/10782826/digital-signature-for-a-file-using-openssl#18359743 (https://stackoverflow.com/questions/10782826/digital-signature-for-a-file-using-openssl#18359743)

Purtroppo il tutto non è compatibile con OpenSSL, anzi tutt'altro. Questo perchè certificato e chiavi sono in un contenitore "privato" e non sono in alcun modo esportabili.

Occorre operare tramite la DLL fornita con la chiavetta (Bit4ID) che dovrebbe essere compatibile con PKCS#11 ...
Titolo: Re:Firma digitale documenti pdf
Inserito da: nomorelogic - Aprile 05, 2023, 03:54:04 pm
quindi il file del certificato non è su un file system  esposto per la copia?
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 04:03:58 pm
No. E le chiavi private non sono in alcun modo esportabili.
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 04:09:12 pm
Il CSP (dalle nuove CryptoApi di Windows) è:

"Bit4id Key Storage Provider"
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 04:17:12 pm
Si potrebbe partire da qui:

https://github.com/topics/pkcs11?l=java&o=asc&s=forks (https://github.com/topics/pkcs11?l=java&o=asc&s=forks)

Tutto java minuto per minuto, il linguaggio (in maniera ironica ovviamente) preferito da @nomorelogic    ;D ;D ;D ;D
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 04:21:22 pm
E questo un buon posto: analizzerò ciò che viene usato, visto che si interfaccia proprio con la DLL di Bit4ID (sempre che qualcun altro amante di java non voglia con gioia estrema anticiparmi).

https://github.com/napobear/Java-Digital-Signature (https://github.com/napobear/Java-Digital-Signature)

Ciao
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 06:13:51 pm
https://github.com/esig
Allora guarda questo...
All'ue con furore.
Titolo: Re:Firma digitale documenti pdf
Inserito da: nomorelogic - Aprile 05, 2023, 06:39:48 pm
un sacco di roba...
c'è anche il sorgente per una web app con tanto di web app online...
https://ec.europa.eu/digital-building-blocks/DSS/webapp-demo/sign-a-pdf (https://ec.europa.eu/digital-building-blocks/DSS/webapp-demo/sign-a-pdf)
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 06:50:21 pm
Cmq, leggendo il codice, mi sembra di intuire che si debba creare una sezione "SIG"  nel pdf.


Con il TPDFDocument non è un problema, aggiungi la sezione.
Quello che non mi è ancora del tutto chiaro è cosa ci mettano dentro.
Da una prima lettura sembra che inseriscano le informazioni su una cosa che chiamano "filter"...
Solo che poi passano alla buona e cara lib apache la creazione del pdf in quanto tale. Oppure ad una openpdf che non conoscevo.


Stilgar


Stai all'ingresso del tunnel....(inglese maccheronico)
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 06:50:53 pm
Si, però sono tutti strumenti esterni.

Di pronto in Pascal non è che ho trovato tanto (qualcuno aveva tentato).

Ora mi metto di impegno e provo io.

Intanto sono riuscito a runtime a caricarmi tutte le funzioni della libreria della chiavetta .... (grazie anche a JEDI).

P.S.: e poi dicono che la FORZA .... non serve ...  ;D

P.S.1: FORZA <----> JEDI(Y) .....
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 06:52:16 pm
personalmente sto cercando l'algoritmo.
 ;)
Titolo: Re:Firma digitale documenti pdf
Inserito da: nomorelogic - Aprile 05, 2023, 06:54:04 pm
polpetta avvelenata....

https://stackoverflow.com/questions/6003643/java-c-c-c-php-to-pascal-converter (https://stackoverflow.com/questions/6003643/java-c-c-c-php-to-pascal-converter)

https://forum.lazarus.freepascal.org/index.php?topic=13308.0 (https://forum.lazarus.freepascal.org/index.php?topic=13308.0)


Edit:
nel senso, questo tool non lo conoscevo ma può essere utile per convertire qualche libreria
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 06:58:23 pm
(Bastaaaaaaardo) ;D ;D ;D ;D ;D


Alla Aldo Giovanni e Giacomo.


OT:
Ero incastrato nel recupero della gestione dei frame dal byte code...
Non avendo chiaro come gestirli, non so come riempire i "begin/end".
poi c'è la rogna della variabili che possono avere lo stesso nome e tipi diversi, se i metadati di debug sono attivi dentro il .class
 ;D
Titolo: Re:Firma digitale documenti pdf
Inserito da: nomorelogic - Aprile 05, 2023, 07:01:29 pm
yes, I am
 8)
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 07:01:40 pm
polpetta avvelenata....

https://stackoverflow.com/questions/6003643/java-c-c-c-php-to-pascal-converter (https://stackoverflow.com/questions/6003643/java-c-c-c-php-to-pascal-converter)

https://forum.lazarus.freepascal.org/index.php?topic=13308.0 (https://forum.lazarus.freepascal.org/index.php?topic=13308.0)

Si, vuoi propri convertire TUTTE le librerie interessate ?

personalmente sto cercando l'algoritmo.
 ;)

L'algoritmo per firmare un PDF ? Ce ne sono tanti .... però senza avere accesso alla chiavetta in maniera nativa (o quasi) sei sempre legato a componenti di terze parti. Vorrei fare qualcosa di nativo, e sono convinto che la base sarà compatibile con le chiavette di mezzo mondo.

Tenete presente che gli stessi tool di Microsoft sono stati aggiornati più volte (e a me ultimamente nessuno stà funzionando).

Ciao

N.B.: dovrebbe funzionare anche in LINUX, teoricamente ... ma questo sarà un passo successivo.
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 07:03:30 pm
Speta, stai parlando della persistenza dei certificati su dispositivi terzi?
Io stavo parlando di cosa mettere dentro il pdf (per rispondere al quesito iniziale) in modo da fare firme massive dei pdf.
Citazione
La situazione è questa:
-Non si tratta però di un documento ogni tanto ma di 50-100 documenti prodotti al giorno, quindi non posso far digitare ogni volta la password ma vorrei
 che l'utente battesse una volta sola la password quando apre il programma;
-Il certificato è quello che sta dentro il pennino che rilascia la Camera di Commercio oppure Aruba;
-I pdf sono prodotti dal programma stesso;
-Lanciando programmi esterni trovati in rete,  si può firmare ma non mi è stato possibile passargli la password come parametro, con questo tipo di certificato non funziona.
Titolo: Re:Firma digitale documenti pdf
Inserito da: nomorelogic - Aprile 05, 2023, 07:13:11 pm
polpetta avvelenata....

https://stackoverflow.com/questions/6003643/java-c-c-c-php-to-pascal-converter (https://stackoverflow.com/questions/6003643/java-c-c-c-php-to-pascal-converter)

https://forum.lazarus.freepascal.org/index.php?topic=13308.0 (https://forum.lazarus.freepascal.org/index.php?topic=13308.0)

Si, vuoi propri convertire TUTTE le librerie interessate ?

no, solo quella con l'algoritmo di cifratura




Tenete presente che gli stessi tool di Microsoft sono stati aggiornati più volte (e a me ultimamente nessuno stà funzionando).
N.B.: dovrebbe funzionare anche in LINUX, teoricamente ... ma questo sarà un passo successivo.

JEDI --> FORZA --> questo è il lato oscuro della forza...

 ;D ;D ;D
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 07:16:43 pm
Gli algoritmi di cifratura sono "standard" con la jre.
Bisogna "tradurre" quelli se vuoi andare tradurre.
Mal che vada, capito come mettere il certificato estratto all'avvio dell'applicazione e salvato in memoria, poi si può usare dchiper (se ricordo come si scrive).
SHA256 dovrebbe essere supportato dalla libreria.
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 07:19:20 pm
Drago, se sai come firmare un pdf (in dettaglio) spiega, così mi eviti di leggere un botto di codice....

Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 07:21:58 pm
Drago, se sai come firmare un pdf (in dettaglio) spiega, così mi eviti di leggere un botto di codice....

Non lo sò di preciso, ho sempre usato tools esterni anche io, però sono arrivato qui ...

Ho letto e decodificato il certificato, quindi teoricamente ora lo posso usare .... e senza tool esterni .... ora vedo la firma come funzia e come inserirla sia fisicamente sia graficamente in un PDF ...
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 07:26:17 pm
P.S.... Tutto in puro pascal .... (Delphi per adesso per gli strumenti che ha di debug).
Titolo: Re:Firma digitale documenti pdf
Inserito da: tito_livio - Aprile 05, 2023, 08:25:22 pm
Devo aggiungere che:
-Io come tool esterno uso JsignPdf e sul sito https://jsignpdf.sourceforge.net/ ho visto che ci sono i sorgenti.
Questo programma lo uso lanciandolo dal mio prog passandogli tutti i parametri necessari.
Anche se è previsto l'invio della password, inviandola non viene considerata perché, da quello che ho capito,
il certificato dovrebbe essere tirato fuori dalla chiavetta.
Quindi ogni volta che JsignPdf viene lanciato chiede la password, dopo però JsignPdf può firmare tanti documenti
uno dopo l'altro (tutti quelli di una cartella p.e), senza chiedere niente, ma è un'operazione lunga da lanciare a fine
lavoro e questo crea un po' di problemi.

-Ho visto che FastReport stampa e firma pdf, https://www.fast-report.com/en/blog/show/multiple-digital-signatures-delphi/,
 addirittura con più firme.
 Non so però se è possibile salvare la password e firmare senza chiedere niente all'utente.
 Ho provato a scaricare la trial per Lazarus ma non contiene i componenti nè per l'esportazione in PDF nè per inserire
 aree firmabili nel report.
 Forse questi componenti sono disponibili nella trial per Delphi, magari @DragoRosso, visto che hai Delphi puoi provare a
 vedere se con Delphi la cosa funziona.
 Non penso che userò Delphi ma credo sarebbe utile saperlo.

 Grazie per la numerosa partecipazione
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 05, 2023, 09:28:21 pm
-Ho visto che FastReport stampa e firma pdf, https://www.fast-report.com/en/blog/show/multiple-digital-signatures-delphi/,
 addirittura con più firme.

LazReport (o fpReport) non sò bene quale componente è di fatto FastReport ... prova a dare una occhiata.

Comunque ti confermo che su FastReport in Delphi la password può essere inserita a codice senza che venga mai chiesta all'utente.

Ma ciò non fà testo, in quanto FastReport non accede alla chiavetta ma solo ed esclusivamente a certificati su file (esclusivamente effettivamente non sò, ma ciò che ho io non ha altre scelte).

Ciao
Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 05, 2023, 09:40:03 pm
Tito.
Hai provato ad inserire key-password nella riga di comando che lanci con TProcess?
Oppure se utilizzi i keystore "keystore-password" e "keystore-file"?

Sto guardando il codice del progetto che hai segnalato.


Stilgar.
Titolo: Re:Firma digitale documenti pdf
Inserito da: tito_livio - Aprile 06, 2023, 12:59:19 am
LazReport (o fpReport) non sò bene quale componente è di fatto FastReport ... prova a dare una occhiata.

Ho visto, Lazreport è un sottoinsieme di Fastreport e molte funzionalità non le ha, tra cui quella di firmare i documenti.

Comunque ti confermo che su FastReport in Delphi la password può essere inserita a codice senza che venga mai chiesta all'utente.
Ma ciò non fà testo, in quanto FastReport non accede alla chiavetta ma solo ed esclusivamente a certificati su file (esclusivamente effettivamente non sò, ma ciò che ho io non ha altre scelte).
Ciao

Infatti, mi aspettavo che fosse così però è sempre un'informazione interessante.

Tito.
Hai provato ad inserire key-password nella riga di comando che lanci con TProcess?
Oppure se utilizzi i keystore "keystore-password" e "keystore-file"?

Ho provato ad inviare la password in entrambi i modi, sia come parametro key-password che come parametro keystore-password.
Non ho usato il parametro keystore-file perché non saprei quale file indicare, infatti il keystore dove finisce la key della penna è
WINDOWS-MY che non conserva le chiavi in un file.

Buonanotte


Titolo: Re:Firma digitale documenti pdf
Inserito da: Stilgar - Aprile 06, 2023, 09:48:39 am
Per la chiavetta, ti avranno fornito pure un SDK per interagire via software... no?
Titolo: Re:Firma digitale documenti pdf
Inserito da: bonmario - Aprile 06, 2023, 10:17:25 am
Ho provato ad inviare la password in entrambi i modi, sia come parametro key-password che come parametro keystore-password.

Per esperienza, io farei questa prova:
- prova a lanciare i comandi, passando la password, da terminale, e non dal tuo programma
- se funziona, nel tuo programma, invece di lanciare il comando, lo scrivi in un file bat, lanci il bat e poi lo cancelli (al massimo, prima di cancellarlo, lo riscrivi, per evitare che sia facilmente recuperabile)

Non ho mai capito perché, ma ogni tanto, soprattutto con i comandi che non hanno "la parte grafica" e ricevono parametri, lanciati con TProcess mi danno problemi, usando invece il .bat, va tutto liscio

Ciao, Mario
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 06, 2023, 11:20:26 am
Per la chiavetta, ti avranno fornito pure un SDK per interagire via software... no?

La chiavetta ha in dotazione i software di gestione e il software di firma (oltre che firefox portable "sicuro"). Bit4ID (che è il proprietario della tecnologia) fornisce l'SDK a pagamento. Ma fornendo l'interfaccia PKCS11# diciamo che l'SDK non è necessario.

Ci sono altri "costruttori" che forniscono anche essi l'SDK, sempre a pagamento, ma mi pare che siano più o meno tutti simili (da quello che ho letto noi forum qua e la).

La chiavetta è pensata per un uso al cliente finale, infatti viene fornita da CCIAA e Aruba.

Ciao

P.S.: e il bello che in pascal c'è meno che niente. Ci sono delle aziende che hanno fatto degli SDK per PKCS#11 standard a pagamento tramite DLL o OCX e li puoi sbizzarrirti come vuoi.
La tecnologia usata per le chiavette viene chiamata in gergo CryptoKI.
Titolo: Re:Firma digitale documenti pdf
Inserito da: DragoRosso - Aprile 06, 2023, 11:29:59 am
Non mi manca molto per terminare il wrapper funzionante in pascal per PKCS#11. Stò adattando le API all'ultima situazione di fatto (che dovrebbe essere del 2015, ma per esempio tramite Microsoft fino a 5 mesi fà riuscivo a firmare i file eseguibili, ora non più .....  >:( )

Ciao
Titolo: Re:Firma digitale documenti pdf
Inserito da: tito_livio - Aprile 06, 2023, 01:00:58 pm
Per la chiavetta, ti avranno fornito pure un SDK per interagire via software... no?
Non viene fornito l'SDK, insieme alla chiavetta, oltre al software per firmare fra le utility forniscono un'applicazione "import certificato", dopo averla eseguita i programmi di firma che stanno su PC funzionano.

Ho provato ad inviare la password in entrambi i modi, sia come parametro key-password che come parametro keystore-password.

Per esperienza, io farei questa prova:
- prova a lanciare i comandi, passando la password, da terminale, e non dal tuo programma
- se funziona, nel tuo programma, invece di lanciare il comando, lo scrivi in un file bat, lanci il bat e poi lo cancelli (al massimo, prima di cancellarlo, lo riscrivi, per evitare che sia facilmente recuperabile)

Non ho mai capito perché, ma ogni tanto, soprattutto con i comandi che non hanno "la parte grafica" e ricevono parametri, lanciati con TProcess mi danno problemi, usando invece il .bat, va tutto liscio

Ciao, Mario

Infatti ho fatto proprio così, tutte le prove con la password fra i parametri, le ho fatto da terminale mentre per l'uso normale lancio un file bat che contiene i parametri %1, %2 ecc. Anche a me spesso TProcess dà problemi.

Ciao a tutti