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