PDF mit JavaScript und der WebCrypto-API signieren
Die Weiterentwicklung der WebCrypto-API und ihre Unterstützung in wichtigen Browsern wie Chrome und Firefox haben die Möglichkeit eröffnet es für die digitale PDF-Signatur zu nutzen. Der Mangel an Dokumentation und detaillierten Beispielen stellt jedoch eine Herausforderung dar. Es gibt zwar Beispiele, die den Signiervorgang erläutern, das gewünschte Ergebnis – eine signierte Base64-PDF-Zeichenfolge – bleibt jedoch schwer zu fassen.
Können wir ein PDF allein mit JavaScript und der WebCrypto-API signieren?
Derzeit hat die WebCrypto-API keinen Zugriff auf Schlüsselspeicher oder externe kryptografische Geräte. Um allgemeine PDF-Signaturanforderungen zu erfüllen, bei denen das PDF innerhalb der Servergrenzen geschützt werden sollte, wird davon abgeraten, das gesamte Dokument an den Browser oder den Signierungs-API-Server zu senden.
Optimaler Ansatz
Eine effektive Lösung besteht darin, einen Hash der PDF-Datei zum Signieren zu erstellen, diesen Hash an den Browser zu senden und JavaScript über eine Browsererweiterung zu verwenden, um auf einen lokalen Schlüsselspeicher (oder USB/Smartcard) zuzugreifen, um den zu generieren Unterschrift. Die resultierende Signatur (z. B. PKCS7- oder CMS-Container) kann an den Server zurückgesendet werden, wo sie in das Original-PDF eingefügt werden kann, aus dem der Hash erstellt wurde.
Signer.Digital Extension for Browser Erweiterungen
Um browserbasierte Signaturszenarien zu erleichtern, stehen eine Browsererweiterung namens Signer.Digital und eine zugehörige .NET-Bibliothek zur Verfügung. Die Erweiterung funktioniert nahtlos mit den wichtigsten Browsern (Chrome und Firefox) und nutzt den Signer.Digital Browser Host, um mit Windows-Zertifikatspeichern und zugrunde liegenden CSPs zu interagieren, um Hashes zu signieren.
JavaScript-Codebeispiel
Um die Signaturfunktion aus der Erweiterung aufzurufen, kann JavaScript-Code verwendet werden als folgt:
// Calculate Sign for the Hash by Calling function from Extension SignerDigital SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256") // or "SHA256" // SignerDigitial.signHashCAdESBr method may be used for producing ICP-Brazil Signature .then( function (signDataResp) { // Send signDataResp to Server }, function (errmsg) { // Send errmsg to server or display the result in browser. } );
Diagramm: Digitales Signieren vom Browser
[Bild des digitalen Signierens vom Browser]
Das obige ist der detaillierte Inhalt vonKönnen JavaScript und die WebCrypto-API allein ein PDF signieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!