Read different certificate/key file formats with Node.JS
Read a X509 certificate / public key, PKC1 private key or PKCS8 private key encoded with PEM
var jose = require('node-jose'); var fs = require('fs'); fs.readFile('PEM_FILE_PATH', function(fileError, fileContent) { if ( fileError ) { console.log(fileError); return; } jose.JWK.asKey(fileContent, "pem").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); });
Read a binary encoded (DER) X509 certificate / public key
var jose = require('node-jose'); var fs = require('fs'); fs.readFile('X509_BINARY_ENCODED_FILE_PATH', function(fileError, fileContent) { if ( fileError ) { console.log(fileError); return; } jose.JWK.asKey(fileContent, "x509").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); });
Read a binary encoded (DER) private key
var jose = require('node-jose'); var fs = require('fs'); fs.readFile('X509_BINARY_ENCODED_FILE_PATH', function(fileError, fileContent) { if ( fileError ) { console.log(fileError); return; } jose.JWK.asKey(fileContent, "private").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); });
Read a PKC12 / PFX file to extract a key / certificate
var jose = require('node-jose'); var fs = require('fs'); var forge = require('node-forge'); // note that the file is loaded as binary content fs.readFile('PFX_PKCS12_FILE_PATH', 'binary', function(fileError, fileContent) { if ( fileError ) { console.log(fileError); return; } // get p12 as ASN.1 object var p12Asn1 = forge.asn1.fromDer(fileContent); // decrypt p12 using the password returned by getPassword(), the password should be protected and not hard coded var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, getPassword() ); // getting the key slot var bags = p12.getBags({friendlyName: 'ALIAS_OF_THE_KEY'}); var keyBag = bags.friendlyName[0]; if ( !keyBag ) { console.log("Key not found"); return; } // transform to PEM to be compatible with node-jose var pem = forge.pki.privateKeyToPem(keyBag.key); jose.JWK.asKey(pem, "pem").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); });