Förderjahr 2021 / Projekt Call #16 / ProjektID: 5822 / Projekt: open-pdf-sign
Der Webserver „NGINX“ ist ein Rückgrat des Internets. Er wird sehr oft verwendet um Websiten auf Servern zu hosten. Vermutlich auch die, sie gerade lesen. Genauso wie das Internet, sind auch PDFs nicht wegzudenken – sei es für Konzerttickets, das Ergebnis von Covid-Tests sowie viele andere Dokumente.
Während klassischerweise ausgedruckte Dokumente abgestempelt oder unterschrieben werden, ist dies beim digitalen Äquivalent PDF nicht der Fall – die dafür angedachte elektronische Signatur wird meist aufgrund Komplexität oder Kosten nicht implementiert, so dass bei heruntergeladenen Dokumenten nicht sicher feststellbar ist, wer Dokument ausgestellt hat oder selbst, von welcher Website es heruntergeladen wurde. Neben der Ausstellereigenschaft ist dann für jemanden, dem ein unsigniertes PDF vorgewiesen wird, nicht nachvollziehbar, ob es verfälscht wurde.
Darum haben wir uns zum Ziel genommen: Jedes PDF, das im Internet bereitgestellt wird, sollte signiert sein.
Um diese zwei Aspekte – digitale Signatur und häufig verwendete Server – zu verknüpfen haben wir in den letzten Monaten intensiv daran gearbeitet, auch mit NGINX möglichst einfach PDFs zu signieren. Die Signatur selbst übernimmt wie geplant unser in Java implementierter open-pdf-sign-Prototyp, den wir im letzten Blogpost vorgestellt haben.
Unser Ziel ist es, ähnlich wie bei letsencrypt für TLS, durch Übernahme einiger weniger Zeilen in die Konfiguration des Webservers automatisch alle von diesem Webserver bereitgestellten PDFs automatisch zu signieren. In einem ersten Schritt haben wir uns NGINX als weitverbreiteten Webserver vorgenommen, später wollen wir jedenfalls auch den anderen beliebten Webserver „Apache“ unterstützen.
Diesem Schritt sind wir um einiges nähergekommen. In unserer Testumgebung ist es uns bereits möglich, alle von einem NGINX bereitgestellten PDF-Files automatisch on-the-fly direkt mit dem TLS-Zertifkat des Servers zu signieren. Um den Aufruf unseres open-pdf-sign-CLI vom Server aus zu bewerkstelligen, verwenden wir derzeit fastcgi. Die Rückgabe funktioniert direkt als Binärdatei über eine Unix-Pipe über den Standardoutput.
Was wir uns als nächstes vornehmen werden, ist eine einfachere Integration mit NGINX. So ist die Einbindung derzeit nur über eine manuelle Installation und Anpassung der Konfiguration möglich, was viele manuelle Schritte erfordert und nicht selbsterklärend ist. Ziel ist es, auch hier inspiriert von letsencrypts „certbot“-Software diese Anpassungen skriptbasiert automatisch vornehmen zu können.