RELEASE NOTES für PDF-AS 3.3 MIGRATION VON PDF-AS 3.2 - Die Voraussetzung für eine Migration von PDF-AS 3.2 ist mindestens eine Java Laufzeitumgebung mit Version 1.5. - Bestehende Konfigurationen können unverändert verwendet werden. Es wird jedoch empfohlen, die Referenzkonfiguration bzw. eine darauf aufbauende Konfiguration zu verwenden. Die Referenzkonfiguration ist nun wesentlich übersichtlicher gestaltet und ausführlicher inline dokumentiert (siehe auch Abschnitt "KONFIGURATION" unten). - Folgende abhängige Bibliotheken müssen ersetzt werden: commons-codec-1.3.jar -> commons-codec-1.6.jar commons-io-1.1.jar -> commons-io-2.2.jar commons-lang-2.3.jar -> commons-lang-2.6.jar core-1.6-SNAPSHOT.jar -> core-1.6-jdk14.jar javase-1.6-SNAPSHOT.jar -> javase-1.6-jdk14.jar itext-2.1.5-rev3628-pdfas-1.1.jar -> itext-2.1.5-rev3628-pdfas-1.2.jar Die neuen Versionen finden sich in den jeweiligen Release-Paketen. - Wird die Referenzkonfiguration verwendet, muss berücksichtigt werden, dass mit folgenden Signaturprofilen keine Signaturen mehr erzeugt werden dürfen bzw. können: AMTSSIGNATURBLOCK_DE_DEPRECATED AMTSSIGNATURBLOCK_EN_DEPRECATED SIGNATURBLOCK_DE_DEPRECATED SIGNATURBLOCK_EN_DEPRECATED ALLGEMEINE ÄNDERUNGEN - Java 1.4 wird nicht mehr unterstützt. Die Mindestvoraussetzung ist nun Java 1.5. - Das ursprüngliche Single-Modul Maven Projekt ist nun als Multi-Modul Projekt ausgeführt, bestehend aus den Modulen: pdf-as-lib: Die PDF-AS Core API. Die Bibliothek kann von Fachapplikationen wie bisher verwendet werden. pdf-as-web: Eine eigenständige PDF-AS Webanwendung (siehe auch http://www.buergerkarte.at/pdf-as). pdf-as-cli: Eine Commandline Version von PDF-AS. pdf-as-release: Release-Modul, das die drei o.g. Module in einem Release-Paket vereint. - Die Webanwendung wird bereits inkl. Apache Tomcat sowie entsprechender Konfiguration und StartScripts erstellt und kann sofort verwendet werden. - Die PDF-AS API wird nun wie folgt als Maven Dependency referenziert (groupId und artifactId haben sich geändert): eu.europa.ec.joinup.egovlabs.pdf-as pdf-as-lib 3.3 - Sonderzeichen wurden aus dem Source-Code entfernt und dieser auf UTF-8 Encoding umgestellt. - Sämtliche .printStackTrace() Anweisungen wurden entfernt. - Einführung einer internen Standard-Konfiguration (classpath:/config/defaultconfig.properties). Diese Standard- Konfiguration entspricht der PDF-AS Referenz-Konfiguration (config.properties), enthält jedoch keine Signaturprofile. Sämtliche Einträge werden von der jeweilig verwendeten Konfiguration überschrieben. - Folgende abhängige, d.h. von PDF-AS verwendete Bibliotheken wurden aktualisiert: commons-codec-1.3.jar -> commons-codec-1.6.jar commons-io-1.1.jar -> commons-io-2.2.jar commons-lang-2.3.jar -> commons-lang-2.6.jar core-1.6-SNAPSHOT.jar -> core-1.6-jdk14.jar javase-1.6-SNAPSHOT.jar -> javase-1.6-jdk14.jar itext-2.1.5-rev3628-pdfas-1.1.jar -> itext-2.1.5-rev3628-pdfas-1.2.jar Hinweis: Diese Abhängigkeiten müssen bei der Migration von PDF-AS 3.2 auf 3.3 berücksichtigt werden. Siehe auch Abschnitt "MIGRATION". - Abhängigkeiten zu folgenden Bibliotheken wurden entfernt: xml-apis-1.3.02.jar - Die folgenden Signaturprofile gelten als veraltet: AMTSSIGNATURBLOCK_DE_DEPRECATED AMTSSIGNATURBLOCK_EN_DEPRECATED SIGNATURBLOCK_DE_DEPRECATED SIGNATURBLOCK_EN_DEPRECATED Diese sind in der Referenzkonfiguration nun so konfiguriert, dass sie nur noch zur Signaturprüfung, nicht aber zum Erzeugen von Signaturen verwendet werden können. - Folgende Bürgerkartenumgebungen werden unterstützt (Liste der Identifier entsprechend nach http://www.buergerkarte.at/konzept/securitylayer/spezifikation/aktuell/bindings/bindings.html#http.kodierung.response): A-Trust lokale BKU citizen-card-environment/1.2 asignSecurityLayer/1.3.3 citizen-card-environment/1.2 asignSecurityLayer/1.4.1 citizen-card-environment/1.2 asignSecurityLayer/1.4.2 Handy-Signatur citizen-card-environment/1.2 asignMobileBku/1.1.0 Handy-Signatur (Test) citizen-card-environment/1.2 atrustHandyBku/1.1.0 IT-Solution trustDesk Basic citizen-card-environment/1.2 trustDeskbasic[-OSX|-Linux]/2.7.*|2.8.*|3.0.* MOCCA citizen-card-environment/1.2 MOCCA/*[-X14] NEUE FUNKTIONEN - Unterstützung von XAdES 1.4 basierten Signaturen durch MOCCA. Dazu wurde ein neuer Signaturparameter "etsi-moc-1.2" eingeführt (siehe auch aktualisierte PDF-AS Spezifikation 2.3). - Erkennung verschlüsselter Dokumente. - Spezieller Logger für statistische Informationen. - Import von Konfigurationsdateien via Include-Anweisung. - Vereinfachung der Konfiguration durch Beschränkung auf die wesentlichen Optionen sowie durch Trennung der Signaturprofile in einzelne Konfigurationsdateien (z.B. SIGNATURBLOCK_DE.properties), die nun mittels Include-Anweisung eingebunden werden. - Verwendung einer fortgeschrittenen Konfiguration (advancedconfig.properties), die sämtliche Konfigurationsmöglichkeiten bietet. - Möglichkeit, einzelne Profile zusätzlich zum bisherigen Ein- bzw. Ausschalten nun auch nur für die Signatur oder nur für die Verifikation zuzulassen. So können veraltete Profile noch für die Verifikation verwendet werden, ohne damit die Möglichkeit zu erlauben, neue Signaturen zu erzeugen. - Web-Applikation: Verbesserung der Integrationsmöglichkeit in bestehende Webseiten. BEHOBENE BUGS Modul pdf-as-web: - null_request_page.jsp: NullPointerException behoben. Modul pdf-as-lib: - Leere Signatur-Parameter im Signaturblock führten bisher zu einem Fehler. Leere Signatur-Parameter müssen laut PDF-AS Spezifikation (Abschnitt 5.1.1) als MOA-SS Signaturen interpretiert werden. - Die Konfiguration der QR-Code Signaturplatzhalter "enable_placeholder_search=true|false" wurde bisher ignoriert. - Einige Dokumente mit strukturiertem Inhalt ("tagged documents") führten zu internen Fehlern. Nun wurde ein Fallback-Mechanismus integriert, der Dokumente mit fehlerhaften oder fehlenden Strukturinformationen dennoch signiert. - Das verarbeitete PDF-Dokument wurde bisher in einigen Fällen nicht geschlossen, bzw. damit PdfBox/iText Ressourcen nicht freigegeben. - Im Falle von unsichtbaren Signaturen wurden bisher unter Umständen leere Seiten hinzugefügt. - Fehlerhafte Verarbeitung von Signaturen behoben, deren Zertifikat einen Issuer-Namen mit Beistrich in einem der RDNs (Relative Distinguished Name) aufwies, z.B. "...,CN=Go Daddy Secure Certification Authority,O=GoDaddy.com\, Inc.,L=Scottsdale,..." - Die PDF/A-1b-Konformität eines Dokuments war bisher nach der Signatur mit PDF-AS trotz Verwendung eines PDF/A-aktivieren Signaturprofils (z.B. SIGNATURBLOCK_DE_PDFA) unter Umständen nicht mehr gegeben. PDF/A setzt die Verwendung von geräteunabhängigen Farbräumen voraus. PDF-AS bzw. die zugrundeliegende iText-Library verwendet grundsätzlich jedoch geräteabhängige Farbräume. Deshalb wird nun bei der Signatur mit einem PDF/A-aktivierten Signaturprofil ein geräteunabhängiges ICC-Farbprofil in das Dokument eingebettet, wodurch dieses PDF/A-konform bleibt. - Fehlerhafte Verarbeitung von signierten Dokumenten mit Inkrementellen Updates behoben. Spezielle Konstellationen von Trailer und Cross-Reference Tabelle eines Inkrementellen Updates führten zu einem internen Fehler. - Fehlerhafte Verarbeitung verschlüsselter Dokumente behoben: Beim Versuch, ein verschlüsseltes Dokument zu laden wird nun statt einem undefinierten internen Fehler ein entsprechender Fehler mit Fehlercode (231) generiert. - Automatische Positionierung des Signaturblocks verbessert bzw. Probleme mit speziellen PDF-Elementen behoben. KONFIGURATION - Die PDF-AS Konfiguration ist abwärtskompatibel zu älteren PDF-AS Versionen. Eine bestehende Konfiguration kann ohne Anpassung verwendet werden, nutzt dann allerdings unter Umständen auch nicht die neuen Features. - Die PDF-AS Konfiguration erfolgt wie bisher auch über die Datei config.properties. Die Referenzkonfiguration wurde jedoch sehr stark vereinfacht, d.h. selten verwendete Konfigurationsschlüssel wurden in eine "fortgeschrittene Konfiguration" (advancedconfig.properties) ausgelagert. Diese fortgeschrittene Konfiguration wird mittels mit der neuen Include-Funktion (siehe unten) von config.properties aus eingelesen. Konkret wurden folgende Konfigurationsschlüssel von config.properties nach advancedconfig.properties verschoben: assume_only_signature_blocks = false binary_only = false bku.available_for_commandline = true bku.available_for_web = true bku.sign.KeyboxIdentifier = SecureSignatureKeypair check_document = true check_old_textual_sigs = true correct_document_if_necessary = true correct_document_on_verify_if_necessary = true corrector = internal default.SIG_BAIK_ENABLED = false default.SIG_PDFA1B_VALID = false default.adobeSignFieldValue = PDF-AS Signatur default.adobeSignReasonValue = Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at default.adobeSignText.binary = PDF-AS default.adobeSignText.textual = PDF-AS default.sigLogoAltText = Abgebildet ist eine Standard-Signaturbildmarke. default.signature_block_width_warning_threshold = 150 default.verifyURL = http://www.signaturpruefung.gv.at defaults.phlength.SIG_ALG = 100 defaults.phlength.SIG_ID = 70 defaults.phlength.SIG_NAME = 210 defaults.phlength.certificate = 10000 defaults.phlength.line_break_tolerance = 10 defaults.phlength.timestamp = 5000 enable_placeholder_search = false external_corrector_commandline = C:/correct.exe "##input_document##" "##output_document##" external_corrector_timeout = 15000 moa.available_for_commandline = true moa.available_for_commandline = true moa.available_for_web = true moa.available_for_web = true moa.sign.console.detached.enabled = false mobiletest.sign.KeyboxIdentifier = SecureSignatureKeypair moc.available_for_commandline = false moc.available_for_web = true moc.sign.KeyboxIdentifier = SecureSignatureKeypair strict_mode = false supress_exception_when_last_iublock_is_no_signature = false - Grundsätzlich gibt es in PDF-AS vier Konfigurationsebenen (zwei interne und zwei lokale): (a) Eine interne Konfiguration (classpath:/config/pdf-as.properties), die ausschließlich Eigenschaften der spezifischen PDF-AS Implementierung definiert (z.B. unterstützte BKUs, verwendete Templates, usw.). Diese Konfiguration kann nicht durch andere Konfigurationsebenen überschrieben werden. Es wird ausdrücklich davon abgeraten, diese Einstellungen zu verändern! (b) Eine interne Standard-Konfiguration (classpath:/config/defaultconfig.properties), die inhaltlich exakt der Einstellungen der fortgeschrittenen Konfiguration (c) entspricht, genau wie diese jedoch keine Signaturprofile definiert. Sämtliche Einstellungen aus der internen Standard-Konfiguration können durch (c) bzw. (d) überschrieben werden. (c) Eine lokale Datei advancedconfig.properties, die ein vollständiges Set an möglichen Konfigurationsschlüssel enthält. Die Datei wird durch die Include Anweisung in (d) "include.advancedconfig = advancedconfig.properties" eingebunden. (d) Die bereits bekannte lokale Datei config.properties. Diese setzt ggf. Konfigurationsschlüssel die von den Standardwerten aus (b) abweichen sowie lädt Signaturprofile mittels Include-Anweisung. - Include Mechanismus: Es ist nun möglich von einer Konfigurationsdatei aus, weitere Konfigurationsdateien zu laden. Dies erfolgt beispielsweise bereits in der Datei config.properties (d) der Referenzkonfiguration dieses Releases: z.B. # Standard-Profile include.01 = profiles/INVISIBLE.properties include.02 = profiles/SIGNATURBLOCK_DE.properties include.03 = profiles/SIGNATURBLOCK_DE_DEPRECATED.properties include.04 = profiles/SIGNATURBLOCK_DE_NOTE.properties Die Anweisung besteht aus dem Schlüsselwort "include.BELIEBIGER_BEZEICHNER" sowie dem relativen Pfad zur einzubindenden Datei, der auch aus Wildcards bestehen kann. "BELIEBIGER_BEZEICHNER" muss durch ein beliebiges Schlüsselwort ersetzt werden. Dieses muss zusammen mit dem Prefix "include." einen eindeutigen Schlüssel darstellen: z.B. # Amtssignatur-Profile include.amtssignaturprofile = profiles/AMTSSIGNATURBLOCK*.properties # PDF/A Profile include.pdfa = profiles/*PDFA.properties # Unsichtbares Profil include.invisible = profiles/INVISIBLE.properties - Eine ausführliche Beschreibung sämtlicher Konfigurationsparameter findet sich inline in den jeweiligen lokalen Konfigurationsdateien (c) und (d). - Der folgende Konfigurationsschlüssel wurde aus der lokalen Konfiguration (d) entfernt und fix in die interne Konfiguration (a) eingetragen. Diese Einstellung kann nicht überschrieben werden: default.adobeSignEnabled = true (Diese Einstellung fügt eine Signaturkennzeichnung - so wie von Adobe eigentlich vorgesehen - in das Dokument ein. Signierte Dokumente sind dadurch vor versehentlichen Änderungen geschützt. Würde dies nicht erfolgen, könnten binäre Signaturen beim Abspeichern der Dokumente versehentlich entfernt werden.) Thomas Knall, Datentechnik Innovation GmbH