Maison >interface Web >js tutoriel >Comment puis-je signer numériquement un PDF à l'aide de JavaScript sans accès direct par clé ?

Comment puis-je signer numériquement un PDF à l'aide de JavaScript sans accès direct par clé ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 22:50:11977parcourir

How Can I Digitally Sign a PDF Using JavaScript Without Direct Key Access?

Signer un PDF avec Plain JavaScript

Défi :

Signer numériquement un document PDF à l'aide de l'API WebCrypto pose un défi, car l'API actuelle ne permet pas directement l'accès au stockage des clés ou au crypto local appareils.

Solution :

Pour contourner cette limitation, il est recommandé de :

  1. Créer un hachage du PDF : Générez un hachage du fichier PDF au lieu d'envoyer l'intégralité du document au navigateur.
  2. Utiliser une extension de navigateur : Installez une extension de navigateur telle que Signer.Digital pour accéder aux magasins de clés locaux (par exemple, magasin de certificats Windows ou PKCS#11 sous Linux ).
  3. Signez le hachage : Utilisez l'API de l'extension pour signer le PDF haché à l'aide de la clé privée obtenue à partir du magasin de clés local.
  4. Recevoir la signature : L'extension du navigateur renverra la signature dans un format approprié (par exemple, PKCS7).
  5. Injecter la signature dans le PDF : Côté serveur, utilisez une bibliothèque appropriée (ou celle fournie par Signer.Digital) pour injecter le signature dans le fichier PDF d'origine.

Extension Signer.Digital :

L'extension de navigateur Signer.Digital fournit les fonctionnalités nécessaires pour effectuer le processus de signature comme suit :

  • Fonction : SignerDigital.signPdfHash(hash, certThumbPrint, hashingAlgo)
  • Paramètres :

    • hash : Hash du PDF dans une chaîne encodée en Base64
    • certThumbPrint : Empreinte du certificat à utiliser pour signature
    • hashingAlgo : algorithme utilisé pour hacher le PDF (par exemple, "SHA256")

Exemple :

// 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
   }
);

Remarque :

  • La clé privée est stockée localement dans les paramètres de certificat du navigateur.
  • Dans le À l'avenir, avec les progrès de l'API WebCrypto, l'accès direct au stockage des clés pourrait devenir possible, éliminant ainsi le besoin d'extensions de navigateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn