Comment vérifier des signatures numériques en ligne
Vérifiez des signatures HMAC, RSA et ECDSA sur une charge arbitraire avec clé publique ou secret partagé — utile pour intégrations d’API, JWT et débogage de webhooks.

D’autres utilitaires qui complètent bien ce guide :
Pourquoi c’est important
Quand le webhook d’un fournisseur échoue votre vérification, la cause est presque toujours : mauvaise clé, mauvais algorithme, mauvaise canonicalisation, mauvais encodage. Plutôt que d’emplir votre code de console.log, collez message et signature dans un vérificateur de référence et comparez. Ça dit tout de suite si le bug est dans votre code ou dans le message.
Trois scénarios réels
Collez le JWT, la clé publique, choisissez RS256/ES256/HS256, voyez « valide » ou « invalide ».
Bug isolé côté handler
Utilisez la clé RSA publique publiée pour confirmer la signature du binaire.
Provenance vérifiée
Signez la charge avec le secret, comparez à l’en-tête entrant.
Chemin de code validé
Parcours
Ouvrez le vérificateur de signatures.
Coller le message
Les exacts octets signés. Pour un JWT, c’est
header.payload; pour AWS Sig V4, la chaîne canonique à signer.Coller la signature
Hex ou Base64 — choisissez l’encodage de la source. L’outil détecte souvent le format courant.
Fournir la clé
Symétrique : collez le secret (ou sa forme Base64/hex). Asymétrique : collez la clé publique au format PEM.
Choisir l’algorithme
HS256 / HS384 / HS512 (HMAC), RS256 / RS512 (RSA-PKCS1), PS256 (RSA-PSS), ES256 / ES384 (ECDSA). Les mêmes noms
algJWT s’appliquent.Lire le verdict
« Valide » ou « Invalide » avec une ligne de raison si invalide (mismatch d’algo, erreur parse clé, longueur signature).
Entrées
Message: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEifQ
Signature: L6S8LWkLzpcREMa8gxaaZbWwLNk0LgcBh6dRQpfIBrI
Key: MyVeryLongSharedSecretValue1234567890
Algorithm: HS256Résultat
Valid signature.
Conseils avancés
- Testez toujours avec les vecteurs de référence du fournisseur. Beaucoup publient message + signature connus pour valider votre implémentation.
- Pour les JWT, copiez l’en-tête pour confirmer que
algcorrespond. Ignorez les jetons non signés (alg=none) — vecteur d’attaque. - Privilégiez PSS pour les nouveaux designs RSA. PKCS#1 v1.5 (RS256) reste ok, mais la communauté crypto préfère RSASSA-PSS (PS256).
- Surveillez la chaîne canonique. Un
\nmanquant, un nom d’en-tête en minuscules, et la signature bascule. Diff contre une capture qui marchait.
Pièges courants
Piège courant
Clé publique au mauvais format
Les PEM sont en BEGIN PUBLIC KEY (SPKI) ou BEGIN RSA PUBLIC KEY (PKCS#1). L’outil accepte les deux ; vérifiez d’avoir collé la clé publique (ni certificat seul, ni clé privée).
Piège courant
Signature Base64URL mais interprétée en Base64
Les signatures JWT utilisent Base64URL (sans padding, alphabet -_). Réglez l’encodage d’entrée en conséquence ou normalisez à la main.
Piège courant
Mismatch sur le nom d’algorithme
« sha256WithRSAEncryption » côté OpenSSL, c’est RS256 côté JWT. Choisissez l’alias correct dans le menu.
Quand ce n’est pas l’outil adapté
- Émission de certificats — OpenSSL ou votre AC.
- Vérification des certificats TLS serveur — travail du navigateur ; la chaîne de validation est bien plus large qu’une simple signature.
- Signatures Authenticode Windows / Apple Developer ID pour binaires — outillage spécifique plateforme.
FAQ
Puis-je vérifier un webhook Stripe / GitHub ici ?
Oui. HS256 (HMAC-SHA-256), secret du tableau de bord, corps brut, valeur d’en-tête comme signature. Le résultat indique si la requête a été modifiée.
Ed25519 est supporté ?
La vérification Ed25519 est prévue. Pour l’instant utilisez la CLI openssl pkeyutl -verify.
Ma clé part-elle sur un serveur ?
Non. WebCrypto s’exécute localement ; les clés ne quittent pas le processus navigateur.
Étapes suivantes
- Calculez la partie HMAC avec le générateur HMAC.
- Hashez une charge séparément si votre protocole empile HMAC sur un hash du corps avec le générateur de hash.
- Décodez les segments JWT avec l’outil Encoder/Décoder avant de coller le message dans le vérificateur.