firmina: a tool to make legally binding digital signatures using italian smart keys. Works with PADES and CADES signatures
▲ 6 r/foss+3 crossposts

firmina: a tool to make legally binding digital signatures using italian smart keys. Works with PADES and CADES signatures

Making legally binding digital signatures on linux is a hassle when using Italian smart keys. They have proprietary drivers and the desktop apps that support it barely work on linux, they are very heavy electron apps supported by private companies and with bad distribution practices (installation scripts that assume you're using ubuntu).

I made it better for me by building a Rust CLI for CAdES/PAdES digital signatures on Linux.

The tool targets InfoCert bit4id smart cards through PKCS#11 (this is the only kind of key I have so I only tested this one) and exposes a small clap-based interface capable of:

- CAdES attached and detached signing

- CAdES parallel or higher level signatures

- PAdES signing

- p7m content extraction

I'm a Rust newbie, so this was a learning project and I feel like I learned a lot. I also ended up with a tool that feels good to use and I feel is a genuinely better alternative than what I've tried before, although simpler.

I feel like this could be a nice example for anyone looking to learn more about digital signatures and rust.

AI disclaimer: No agent ever wrote code in my files. I only used LLM chats for research and asking for suggestions about libraries, patterns, and so on... I typed all my code manually and I'm aware of every line I committed.

Repository: https://github.com/buonhobo/firmina

u/XLNBot — 4 hours ago
▲ 22 r/Italia

firmina: lo strumento per firmare digitalmente usando le chiavette Bit4id di Infocert su Linux.

Sono un informatico nella PA e capita spesso di dover firmare o lavorare con file firmati digitalmente. Per lavorare uso Linux e mi rendo conto che la situazione delle firme digitali su Linux non è un granché.

Per firmare in CADES (cioè generare un .p7m) con la mia chiavetta Infocert servono programmi che sono stati "rilasciati su Linux" giusto per poter spuntare una casella:

  • Il supporto è pessimo, l'unica distro supportata è la versione di Ubuntu che stava usando il cugino del capo nel momento in cui hanno deciso di supportare Linux,
  • il meccanismo di distribuzione è terribile, bisogna far girare script o installare .deb scaricati da internet.
  • Il programma ufficiale di infocert non mi ha funzionato su fedora (usando distrobox) e Infocamere Sign ha funzionato (sempre usando distrobox) ma con alcuni problemi e anche in quel caso l'applicazione è pesante e lenta da usare.

Alla fine (a parte driver proprietari e supporto allo standard PKCS11 per la chiavetta) la firma in CADES può essere fatta semplicemente con openssl, uno strumento gratuito e open source presente in praticamente tutte le distribuzioni Linux.

Ho speso un po' di tempo per capire come poter usare openssl nonostante le difficoltà scritte sopra e ho fatto firmina. Si tratta di un singolo eseguibile di pochi MB che vede la chiavetta di Infocert, chiede il PIN, fa tutto il necessario per supportare PKCS11 + driver proprietario bit4id e poi usa openssl per firmare il file con una firma CADES legalmente valida (.p7m).

È un semplice tool da riga di comando e in quanto tale può anche essere usato per la firma massiva di una grande quantità di file o in un qualsiasi script.

Questo è il repository dello strumento: https://github.com/buonhobo/firmina

reddit.com
u/XLNBot — 7 days ago

Ho programmato uno strumento per firmare file in CADES (il .p7m) su linux

Ho visto che firmare digitalmente con la chiavetta bit4id di infocert non e' comodissimo su linux.

Ci sono pochi programmi che lo fanno, l'unico che funziona e' InfocamereSign, che pero' funziona solo su ubuntu e ho dovuto fare un mezzo accrocco con distrobox per farlo funzionare su fedora.

Ho deciso quindi di fare un programmino wrapper di openssl (con incluse le librerie necessarie per far funzionare la chiavetta bit4id che ha dei driver proprietari) che rende la cosa piu' rapida e mi permette di non dover installare sti programmi brutti e pesanti. Questo pesa meno di 10MiB.

Per altre esigenze legate ai p7m esistono siti per validare le firme o estrarre i contenuti. Sicuramente anche quella roba si puo' fare wrappando openssl ma non ci ho ancora provato.

https://tecnicopubblico.it/p7m-batch-opener.html
https://itasign.com/verify
https://ec.europa.eu/digital-building-blocks/DSS/webapp-demo/sign-a-document

Questo e' il repo del mio tool: https://github.com/buonhobo/firmina

u/XLNBot — 8 days ago