node-forge est née comme une implémentation TLS en JavaScript et sert surtout aujourd’hui pour ses briques PKI : génération et analyse de certificats X.509 et de CSR, lecture et écriture de fichiers PKCS#12, chiffrement et signatures RSA, et un analyseur ASN.1. Elle fonctionne de la même façon dans les navigateurs et dans Node.js, et ne contient aucun code natif.
Elle ne prend en charge aucune courbe elliptique hormis Ed25519. forge.pki n’expose que rsa et ed25519, et les essais en ont confirmé la conséquence : certificateFromPem() sur un certificat ECDSA lève Cannot read public key. OID is not RSA., et publicKeyFromPem() sur une clé publique EC lève Cannot read public key. Unknown OID., alors même que le lecteur ASN.1 de forge analyse sans problème les mêmes octets. Un code qui inspecte des certificats trouvés dans la nature croise sans cesse des clés ECDSA et a besoin d’un autre analyseur pour elles ; le X509Certificate de node:crypto ou le décodeur de certificats gèrent les deux types de clés.
Pour RSA, l’interopérabilité est sans accroc dès que les paramètres concordent. Les signatures PKCS#1 v1.5 et PSS produites par forge ont été vérifiées avec node:crypto ; PSS exige que l’algorithme de condensat, celui de MGF1 et la longueur du sel concordent des deux côtés, et forge vous oblige à nommer les trois, comme le fait l’exemple. Les clés se chargent depuis du PEM SPKI, PKCS#1 ou de certificat, les clés privées depuis du PKCS#8, du PKCS#8 chiffré, du PKCS#1 et du PKCS#12 ; ouvrez les fichiers PKCS#12 dans l’inspecteur PFX pour voir ce qu’ils contiennent.
Pour la même graine, les signatures Ed25519 de forge étaient identiques octet pour octet à celles de node:crypto. Sa clé privée est la forme étendue de 64 octets (la graine suivie de la clé publique) : les bibliothèques qui attendent la graine de 32 octets n’ont besoin que de la première moitié.
La vérification des signatures a un historique d’analyse trop permissive, et un cas reste ouvert. L’avis GHSA-86w9-cpqp-85rv (CVE-2026-85393), publié en septembre 2026 sans version corrigée, signale que la vérification RSA PKCS#1 v1.5 des versions jusqu’à la 1.4.0 ignore les éléments supplémentaires à l’intérieur de l’identifiant d’algorithme du DigestInfo, ce qui rend les signatures falsifiables avec des clés à petit exposant public, comme 3. Les essais ont reproduit cette permissivité : un bloc au remplissage correct contenant un élément supplémentaire à cet endroit a été vérifié par forge et rejeté par node:crypto. Tant qu’aucun correctif n’est publié, vérifiez les signatures PKCS#1 v1.5 avec node:crypto ou WebCrypto, et évitez les clés RSA d’exposant 3. La 1.4.0 a elle-même corrigé la série précédente (un champ supplémentaire après le condensat et des signatures Ed25519 non canoniques ont tous deux été rejetés), et les versions antérieures à la 1.3.0 présentaient déjà des bugs de falsification de signature (CVE-2022-24771, CVE-2022-24772).