PDF mit einfachem JavaScript signieren
Herausforderung:
Das digitale Signieren eines PDF-Dokuments mit der WebCrypto-API stellt eine Herausforderung dar. da die aktuelle API keinen direkten Zugriff auf Schlüsselspeicher oder lokale Krypto ermöglicht Geräte.
Lösung:
Um diese Einschränkung zu umgehen, wird empfohlen:
-
Erstellen Sie einen Hash der PDF: Generieren Sie einen Hash der PDF-Datei, anstatt das gesamte Dokument an die zu senden Browser.
-
Verwenden Sie eine Browsererweiterung: Installieren Sie eine Browsererweiterung wie Signer.Digital, um auf lokale Schlüsselspeicher zuzugreifen (z. B. Windows-Zertifikatspeicher oder PKCS#11 unter Linux). ).
-
Signieren Sie den Hash: Verwenden Sie die API der Erweiterung, um das gehashte PDF mit zu signieren der private Schlüssel, der vom lokalen Schlüsselspeicher erhalten wurde.
-
Signatur empfangen: Die Browsererweiterung gibt die Signatur in einem geeigneten Format zurück (z. B. PKCS7).
-
Signatur in PDF einfügen: Verwenden Sie auf der Serverseite eine entsprechende Bibliothek (oder die von Signer.Digital bereitgestellte), um die Signatur wieder in das PDF einzufügen Original-PDF-Datei.
Signer.Digital-Erweiterung:
Die Browsererweiterung Signer.Digital bietet die erforderliche Funktionalität, um den Signiervorgang wie folgt durchzuführen:
-
Funktion: SignerDigital.signPdfHash(hash, certThumbPrint, hashingAlgo)
-
Parameter:
- hash: Hash des PDFs in Base64-codierter Zeichenfolge
- certThumbPrint: Fingerabdruck des zum Signieren zu verwendendes Zertifikat
- hashingAlgo: Algorithmus, der zum Hashen verwendet wird das PDF (z. B. „SHA256“)
Beispiel:
// Assuming hash is a Base64-encoded PDF hash
SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256")
.then(
function (signDataResp) {
// Send signDataResp (contains Base64 PKCS7 signature) to server
},
function (errmsg) {
// Handle error
}
);
Nach dem Login kopieren
Hinweis:
- Der private Schlüssel wird lokal in den Zertifikatseinstellungen des gespeichert Browser.
- Mit der Weiterentwicklung der WebCrypto-API könnte in Zukunft ein direkter Zugriff auf die Schlüsselspeicherung möglich werden, sodass keine Browsererweiterungen mehr erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie kann ich ein PDF mit JavaScript ohne direkten Schlüsselzugriff digital signieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!