CAdES signatures on Debian
CAdES is a digital signature standard that is used and sometimes mandated, by the Italian Public Administration.
To be able to do my job, I own a Carta Nazionale dei Servizi (CNS) with which I can generate legally binding signatures. Now comes the problem of finding a software to do it.
Infocamere Firma4NG
InfoCamere are distributing a software called Firma4NG, with a Linux option, which, I'm pleased to say, seems to work just fine.
Autofirma
AutoFirma is a Java software for digital signatures distributed by the Spanish government, which has a Linux version.
It is licensed as GPL-2+ | EUPL-1.1
, and the source seems to be
here.
While my Spanish is decent I lack jargon for this specific field, and I didn't manage to make it work with my CNS.
Autogram
Andrej Shadura pointed me to Autogram, a Slovakian software for digital signatures, licensed under the EUPL-1.2.
The interface is still only in Slovakian, so tried it but I didn't go very far in trying to make it work.
OpenSSL
In trixie, openssl is almost, but not quite, able to do it. Here's as far as I've got.
Install opensc
apt install opensc
Test if you can access the smart card with:
pkcs11-tool --list-objects [-l]
You can find other pkcs11-tool
examples here
Set up a pkcs11 provider for openssl
apt install pkcs11-provider
Edit /etc/ssl/openssl.cnf
:
- In
[provider_sect]
addpkcs11 = pkcs11_sect
- In
[default_sect]
, uncommentactivate = 1
- Add this new section:
[pkcs11_sect]
module = /usr/lib/x86_64-linux-gnu/ossl-modules/pkcs11.so
pkcs11-module-path = /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so
default_algorithms = ALL
activate = 1
Test with openssl list -providers
You can check if openssl can see keys on the card:
openssl pkey -in 'pkcs11:id=%01' -pubin -pubout -text
See PKCS11 URI documentation here.
Install the PKCS11 engine for openssl
apt install libengine-pkcs11-openssl
It looks like providers replaced engines, and this would not be needed, but I couldn't find a way to convince openssl to work without this.
Sign a document
openssl cms -nodetach -binary -cades -outform DER -in filename -out filename.p7m -sign -signer 'pkcs11:id=%01' -keyform engine -engine pkcs11
It verifies correctly using the Austrian verification system.
All the Italian verification systems I tried, however, complain that, although the signature is valid, the certificate is emitted by an unqualified CA and the certificate revocation information cannot be found.
PAdES
When signing PDF files, the PAdES standard is sometimes accepted.
LibreOffice is able to generate PAdES signatures using the "File / Digital signatures…" menu, and provided the smart card is in the reader it is able to use it. Both LibreOffice and Okular can verify that the signature is indeed there.
However, when trying to validate the signature using Italian validators, I get the same complaints about unqualified CAs and missing revocation information.
Wall of shame
Dike GoSign
Infocert (now Tinexta) used to distribute a software called "Dike GoSign" that worked on Ubuntu, which I used on a completely isolated VM, and it was awful but it worked.
I had to regenerate the VM for it, and discovered that the version they distribute now will refuse to work unless one signs in online with a Tinexta account. From the same company that asks you to install their own root certifiactes to use their digital signature system.
Gross.
Dropped.
Aruba Sign
Aruba used to distribute a software called Aruba Sign, which also worked on Ubuntu.
Ubuntu support has been discontinued, and they now only offer support for Windows or Mac.
Yuck. Dropped.