Signer un PDF à l'aide de JavaScript et de l'API WebCrypto
L'évolution de l'API WebCrypto et sa prise en charge dans les principaux navigateurs comme Chrome et Firefox ont soulevé la possibilité de l'exploiter pour la signature numérique de PDF. Cependant, le manque de documentation et d’exemples précis pose des problèmes. Bien qu'il existe des exemples expliquant le processus de signature, le résultat souhaité – une chaîne PDF Base64 signée – reste insaisissable.
Pouvons-nous signer un PDF en utilisant uniquement JavaScript et l'API WebCrypto ?
Actuellement, l'API WebCrypto n'a pas accès aux magasins de clés ou aux dispositifs cryptographiques externes. Pour répondre aux exigences courantes de signature de PDF, où le PDF doit être protégé dans les limites du serveur, l'envoi de l'intégralité du document au navigateur ou au serveur API de signature est déconseillé.
Approche optimale
Une solution efficace consiste à créer un hachage du PDF pour la signature, à envoyer ce hachage au navigateur et à utiliser JavaScript via une extension de navigateur pour accéder à un magasin de clés local (ou USB/Smartcard) afin de générer la signature. La signature résultante (par exemple, PKCS7 ou conteneur CMS) peut être renvoyée au serveur, où elle peut être injectée dans le PDF original à partir duquel le hachage a été créé.
Signer.Extension numérique pour navigateur Extensions
Pour faciliter les scénarios de signature basés sur un navigateur, une extension de navigateur appelée Signer.Digital et une bibliothèque .NET qui l'accompagne sont disponibles. L'extension fonctionne de manière transparente avec les principaux navigateurs (Chrome et Firefox), en tirant parti de Signer.Digital Browser Host pour interagir avec les magasins de certificats Windows et les CSP sous-jacents pour signer les hachages.
Exemple de code JavaScript
Pour invoquer la fonction de signature depuis l'extension, le code JavaScript peut être utilisé comme suit :
// 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. } );
Diagramme : signature numérique à partir du navigateur
[Image de la signature numérique à partir du 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!