Kürzlich bin ich auf das Open Source-Tool DocuSeal gestoßen – Eine selbstgehostete Webanwendung zum digitalen Ausfüllen und Unterschreiben von PDF-Dokumenten. Da ich schon lange weg von Papierdokumenten bin und am liebsten alles einscanne und digital verarbeite, hatte ich in der Vergangenheit Adobe Acrobat verwendet, um Dokumente digital zu unterschreiben. Da ich aber ein Linux-Anwender bin und zudem auch auf Open-Source stehe, konnte bzw. wollte ich Adobe nicht länger verwenden.
DocuSeal bringt aber noch andere weitere Vorteile: Ich kann Formulare und Unterschriftenfelder für mehrere Empfänger erstellen und diese dann via E-Mail einen Link zusenden lassen, damit diese dann das Dokument unterschreiben können. So kann ich beispielsweise Bankverträge die ich und meine Partnerin unterschreiben müssen ganz einfach in DocuSeal hinterlegen und dann mich und sie als Empfänger eintragen und beide können den Vertrag dann ganz einfach am Smartphone, Tablet oder PC unterschreiben.
Zum Schluss wird das PDF-Dokument noch mit einem digitalen Zertifikat signiert, um die Echtheit zu bestätigen. Und hier kam für mich der knackpunkt: DocuSeal kommt mit einem automatisch erstellen vordefinierten Zertifikat daher. Ich möchte aber – um so authentisch wie möglich zu sein – ein eigenes Zertifikat mit eigenen Daten verwenden.
TLDR
Um ein solches Zertifikat zu erstellen, bedarf es tatsächlich nur zwei Befehle (OpenSSL vorrausgesetzt):
openssl req -x509 -newkey rsa:4096 -keyout privatekey.pem -out certificate.pem -sha256 -days 3650 -addext "keyUsage=digitalSignature"
openssl pkcs12 -export -out certificate.pfx -inkey privatekey.pem -in certificate.pem
Und was genau passiert hier?
Der erste Befehl erstellt uns einen neuen, 4096 Bit großen Private Key . Zeitgleich generieren wir aus diesem Private Key auch ein PEM-Zertifikat mit einer Gültigkeit von 10 Jahren (3650 Tage) und fügen die Extension digitalSignature
hinzu. Diese Extension ist wichtig, da diese Aussagt, wofür das Zertifikat genutzt werden darf.
Bei der Erstellung des PEM-Zertifikats werden wir nach verschiedenen Angaben gefragt, die üblicherweise als Informationen in Zertifikaten so hinterlegt sind:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Heraus kommen dann zwei Dateien:
- privatekey.pem – Der Private Key der für die generierung des Zertifikates verwendet wurde. Wie ein Passwort behandeln!
- certificate.pem – Das eigentliche PEM-Zertifikat.
DocuSeal unterstützt leider keine PEM-Zertifikate, daher werden wir aus diesem ein PFX-Zertifikat exportieren. Das ist die Aufgabe des zweiten Befehls. Hier werden wir nach der Passphrase aus dem ersten Befehl gefragt und anschließend nach einer neuen Passphrase (+ Wiederholung) für das neue PFX-Zertifikat.
Der Parameter -out
gibt an, wie die neue Datei heißen soll. -inkey
verweißt auf die Datei mit dem Private Key und -in
auf das zuvor erstelle PEM-Zertifikat.
Und das wars auch schon! Nun kann ich in DocuSeal das neue Zertifikat hochladen und als Standard setzen und von nun an werden alle unterschriebenen Dokumente mit unserem eigenen Zertifikat signiert!
Was ich mir wünschen würde
Am liebsten wäre es mir eigentlich, wenn ich jede Unterschrift mit einem eigenen Zertifikat belegen könnte. Das bedeutet, wenn ich ein Dokument unterschreibe, dann wähle ich auch mein persönliches Zertifikat aus um die Echtheit meiner Unterschrift zu bestätigen. Und auch meine Partnerin hätte dann ihr persönliches Zertifikat, mit dem sie die Echtheit ihrer Unterschrift bestätigen kann.
Leider habe ich in DocuSeal keine solche Option gefunden. Es gibt zwar einen Schalter der besagt, dass für jede Unterschrift ein eigenes Zertifikat zur PDF-Datei hinzugefügt werden soll, allerdings wird dann für alle Parteien immer das Standard-Zertifikat verwendet.