In diesem Artikel möchten wir über digitale Signaturen und die neuen Features diesbezüglich in conzept 16 berichten.
- Digitale Signaturen
- Signieren von PDF-Dateien
- Signieren von XML-Dateien
- Digitale Signaturen verifizieren
Digitale Signaturen
In der kommenden Version 5.9.06 von conzept 16 wird es die Möglichkeit geben, PDF- und XML-Dateien zu signieren. Die Signierung ermöglicht es Empfängern, die Herkunft von PDFs und XMLs zu verifizieren. Besonders bei E-Rechnungen im ZUGFeRD-Format ist dies von Bedeutung, da diese, wie wir bereits in unserem Blog berichtet haben, ab 2025 verpflichtend sind. Die elektronische Signatur selbst ist bei ZUGFeRD in Deutschland nicht verpflichtend, sorgt aber für Sicherheit auf beiden Seiten.
Für die Signierung benötigen Sie eine .pfx oder .p12 Datei, die ein X.509 Zertifikat enthält. Dies ist auch derselbe Typ von Zertifikat, der für die Verschlüsselung von HTTPS verwendet wird. Hier können Sie auch ein existierendes Zertifikat, welches für die Verschlüsselung Ihrer Website genutzt wird, wiederverwenden. So ein gültiges Zertifikat erhält man zum Beispiel bei Let’s Encrypt.
Signieren von PDF-Dateien
Um eine PDF-Datei zu signieren, werden beim Schließen des in conzept 16 bearbeiteten PDFs mit PdfClose die Zertifikatsdatei und das Passwort von dem Zertifikat angegeben. Der “PdfClose(..)” Befehl existiert auch in den früheren Versionen von conzept 16, wird aber in der kommenden Version, um die Signierung zu ermöglichen, erweitert.
sub SignPdf(aPdfFile : alpha(8192); aCertFile : alpha(8192); aCertPassword : alpha; var aOutFileName : alpha; var aOutLogName : alpha) : int
local
{
tPdf : handle;
}
{
// Pfade setzten, PDF öffnen
aOutFileName # _Sys->spPathTemp + 'signed_pdf.pdf';
aOutLogName # _Sys->spPathTemp + 'signed_pdf.txt';
tPdf # PdfOpen(aPdfFile,_PdfOpenDefault,'',_PdfImportAll);
// aCertFile - Zertifikatdatei .pfx oder .p12
// aCertPassword - Passwort für die jeweilige Zertifikatdatei
return(tPdf->PdfClose(aOutFileName,_PdfModePdfNormal,aOutLogName,aCertFile,aCertPassword));
}
Signieren von XML-Dateien
Für das Signieren von XML-Dateien wurde der neue Befehl “XmlSign(..)” hinzugefügt. Das Signieren mit XmlSign funktioniert ähnlich wie PdfClose:
sub SignXml(aXmlFile : alpha(8192); aCertFile : alpha(8192); aCertPassword : alpha; var aOutFileName : alpha) : int
{
// Pfad setzen
aOutFileName # _Sys->spPathTemp + 'signed_xml.xml';
// aXmlFile - Eingabe XML-Datei
// aOutFileName - Ausgabe von signierter XML-Datei
// aCertFile - Zertifikatdatei .pfx oder .p12
// aCertPassword - Passwort für die jeweilige Zertifikatdatei
return(XmlSign(aXmlFile,aOutFileName,aCertFile,aCertPassword));
}
Die Signatur in den XML-Dateien ist eine sogenannte “enveloped signature”, was bedeutet, dass die existierende XML-Datei in die Signatur eingebettet wird und danach von <Signature> XML Tags eingeschlossen ist.
Digitale Signaturen verifizieren
Um Signaturen zu verifizieren, braucht der Empfänger jeweils eine entsprechende Software zu deren Verarbeitung. Bei PDFs können digitale Signaturen ganz einfach mit der gängigen Adobe Acrobat Software verifiziert werden. Für XMLs gibt es Online-Tools wie bspw. Chilkat, aber auch die Möglichkeit, für die Verifizierung eine eigene Lösung on-premise zu bauen.
Mit der Signierung von PDF- und XML-Dateien in conzept 16 haben Sie nun die Möglichkeit, beim Versand digitaler Dokumente zusätzliche Sicherheit zu gewährleisten. Sie sind damit auch schon einen Schritt im Voraus, wenn dies in bestimmten Bereichen verpflichtend wird. In einigen EU-Staaten ist die digitale Signatur bereits Pflicht. Stand heute müssen in Spanien und Italien bei Business-To-Government E-Rechnungen digital signiert sein.